Background Image

FORUM

조회 수 1611 추천 수 0 댓글 1
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄


* 질문 등록 시 다음의 내용을 꼭 기입하여 주세요.

OS
Linux 64bit
CUBRID Ver.
10.1.3.7765-265e708
CUBRID TOOL Ver.
10.1.0.0006 (64bit)
응용 환경(API)
java


* CUBRID 응용 오류, SQL 오류 또는 SQL 튜닝 관련된 문의는 반드시 다음의 내용을 추가해 주세요. 비밀글이나 비밀 댓글도 가능합니다.
* 저희가 상황을 이해하고, 재현이 가능해야 알 수 있는 문제들이 많습니다. 가능한 정보/정황들을 부탁합니다.

 

에러 내용 및 재현 방법 재현 가능한 Source와 SQL
관련 테이블(인덱스, 키정보 포함) 정보 CUBRID 홈 디렉토리 아래 log 디렉토리 압축


-------------- 아래에 질문 사항을 기입해 주세요. ------------------------------------------------------------------------
 

SELECT CASE WHEN chr(32) = chr(0) THEN 'Y' ELSE 'N' END FROM DB_ROOT  ->  수행결과: Y
SELECT CASE WHEN ' ' = '' THEN 'Y' ELSE 'N' END FROM DB_ROOT  -> 수행결과: Y
SELECT CASE WHEN chr(32) = '' THEN 'Y' ELSE 'N' END FROM DB_ROOT  -> 수행결과: Y
SELECT CASE WHEN chr(32) = ' ' THEN 'Y' ELSE 'N' END FROM DB_ROOT  -> 수행결과: Y
SELECT CASE WHEN chr(0) = '' THEN 'Y' ELSE 'N' END FROM DB_ROOT  -> 수행결과: Y
SELECT CASE WHEN chr(0) = ' ' THEN 'Y' ELSE 'N' END FROM DB_ROOT  -> 수행결과: Y

 

분명 chr(0)은 NULL을 의미하는 특수문자고 chr(32)는 공백문자임에도 불구하고 동일한 값으로 인식됩니다.
뿐만 아니라 chr(0), chr(32), ' ', '' 모두 동일한 값으로 나타나는 것을 알 수 있었습니다.
* cubrid.conf 에 oracle_style_empty_string  값은 설정하지 않았습니다.
* 오라클에서는 chr(32) = ' ' 의 경우만 Y로 결과가 출력됩니다

 

SELECT CASE WHEN 'A ' = 'A' THEN 'Y' ELSE 'N' END FROM DB_ROOT  -> 수행결과: Y
SELECT CASE WHEN ' A' = 'A' THEN 'Y' ELSE 'N' END FROM DB_ROOT  -> 수행결과: N
SELECT CASE WHEN 'A B' = 'AB' THEN 'Y' ELSE 'N' END FROM DB_ROOT  -> 수행결과: N
SELECT CASE WHEN 'A' || chr(0) = 'A' || chr(32) THEN 'Y' ELSE 'N' END FROM DB_ROOT  -> 수행결과: Y
SELECT CASE WHEN chr(0) || 'A' = chr(32) || 'A' THEN 'Y' ELSE 'N' END FROM DB_ROOT  -> 수행결과: Y
SELECT CASE WHEN 'A' || chr(0) || 'B' = 'A' || chr(32) || 'B' THEN 'Y' ELSE 'N' END FROM DB_ROOT  -> 수행결과: Y

 

뿐만 아니라 다른 문자가 포함된 문자열은 제일 오른쪽에 있는 값만 '' 와 공백문자가 같은 값으로 인식되고
chr(0) 과 chr(32) 는 언제나 동일한 값으로 인식됩니다.

 

SELECT REPLACE('TEST ING', chr(32), '') FROM DB_ROOT -> 수행결과: 'TESTING'
SELECT REPLACE('TEST ING', chr(0), '') FROM DB_ROOT -> 수행결과: 'TESTING'
SELECT REPLACE('TEST ING', ' ', '') FROM DB_ROOT -> 수행결과: 'TESTING'
SELECT REPLACE('TEST ING', '', '') FROM DB_ROOT -> 수행결과: 'TEST ING'
SELECT REPLACE('TESTING ', '', '') FROM DB_ROOT -> 수행결과: 'TESTING '

 

더 나아가 REPLACE 문 수행시에는 이제와서 '' 와 공백문자가 다른 값으로 인식됩니다.

 

특수문자에 대한 처리가 뒤죽박죽이라 프로젝트 상에서의 처리가 곤란합니다.
확실하게 정의 부탁드립니다.

 

  • ?
    오명환 2021.03.10 14:56
    문의한 사항에 대해 답변드립니다.

    * chr(32) 와 chr(0)를 비교시 같은 문자로 처리하고 있습니다.
    * v11.0 이전 버전에서는 두 문자열을 비교시 문자열 마지막에 있는 공백 문자를 무시하고 비교합니다. 그래서 ' '와 '' 의 비교시 같다라고 결과를 줍니다.
    v11.0부터는 varchar type에서는 비교시 공백 문자를 무시하지 않고 비교하게 변경되었습니다. 즉 ' '와 ''는 다른 문자열로 처리합니다.

    즉, 문자 또는 문자열을 비교할때만 위와 같은 원칙이 적용됩니다.

  1. SQLGate for CUBRID 영구 무료 라이선스 제공

  2. 쿼리 조회오류인가요??

  3. chr(0)과 공백문자 관련 문의입니다.

  4. loaddb 시 에러 문의

  5. cub_manager 관련 질문

  6. exists 문이 너무 느립니다

  7. 리눅스에서 내보내기 시 파이프라인 구분자를 통한 출력 문의

  8. .net db목록 관련 질문 드립니다.

  9. 윈도우 2007

  10. sql문에 대해 문의 드립니다!

  11. backupdb 실행 문의

  12. unloaddb internal system failure 문의

  13. varchar2최대크기

  14. execute 실행시 Attribute column was not found 에러 관련 문의

  15. 스키마? 연결이름?

  16. 데이터타입에 궁금한게 있어 여쭤봅니다.

  17. 급급 인덱스 및 레코드 수 조회

  18. 큐브리드 도입 질문

  19. 테이블 용량 정보 확인 문의

  20. Cubrid python 연동시 한글 깨짐 해결 관련 connect 세팅 문의

  21. 큐브리드 매니저에서 select문에 의해 검색된 결과를 전체내보내기..

Board Pagination Prev 1 ... 26 27 28 29 30 31 32 33 34 35 ... 200 Next
/ 200

Contact Cubrid

대표전화 070-4077-2110 / 기술문의 070-4077-2113 / 영업문의 070-4077-2112 / Email. contact_at_cubrid.com
Contact Sales