Background Image

FORUM

2012.04.04 03:53

varchar 형식 insert 문의

조회 수 12775 추천 수 0 댓글 4
?

단축키

Prev이전 문서

Next다음 문서

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

CentOS 6.2 64비트 버전 OS 에 큐브리드 4.0 64비트 버전을 쓰고 있습니다

 

A 라는 테이블에 B 라는 컬럼을 VARCHAR(4) 로 생성하고 나서

 

insert into A (B) values ('1234567') ;

 

이렇게 쿼리를 날리면 에러가 발생하지 않고 짤려서 들어갑니다 (1234 까지만)

 

insert into A (B) values ('하하') ;

 

이렇게 쿼리를 날리면 하ㅁ   이렇게 깨져서 저장이 됩니다  

 

첨부한 그림파일을 보시면 결과를 캡쳐하였습니다

 

UTF-8 형식이고 single_byte_compare = yes 로 되어 있는데 이것이 상관이 있는지요?

 

제가 원하는것은 크기를 벗어나는 문자열이 입력되면 짤려서 들어가는것이 아니고 에러가 나면서

 

insert 가 되지 않았으면 좋겠습니다  해결책이 있는지 궁금합니다

 

 

  • ?
    엄기호 2012.04.04 20:21

    - UTF-8 환경에서 VARCHAR(4)에 '하하'를 저장하면 마지막 글자가 깨진다
      왜냐하면 UTF-8은 한글, 특수문자에 대해 한 문자가 3바이트로 처리되므로 마지막 글자를 저장할 공간이 2바이트 부족합니다.
      그러므로 자리수 2btye를 늘려야 합니다.
    - Query Editor에서 Length함수를 사용하면 길이값을 알 수 있습니다.
      [ 예)SELECT LENGTH('하하'); ]

     

    해결 방법
    - Query Editor상에서 Data를 저장하지 않기 위한 방법
      INSERT INTO A(B)
      SELECT CASE WHEN LENGTH('하하') = 4 THEN '하하' END
        FROM db_root
       WHERE CASE WHEN LENGTH('하하') = 4 THEN '하하' END IS NOT NULL;

     

    - 일반적으로 개발에서의 처리방법
     1. 응용단(Java, JavaScript, PHP, 개발Tool)에서 입력값 체크
      1) 입력값에 대한 자리수 체크한다.
      2) 입력값를 한문자씩 ASCII코드값으로 가져와 0~127까지면 정상적인 값이고,
         그외는 한글이나 특수문자을 판단하고 처리하는 함수를 만들어서 사용하셔야 합니다.
      3) 위 1,2번에 대한 작업을 완료한 다음에 Insert문을 사용하면 됩니다.
     
     2. 자리수를 늘리는 방법
      1) 컬럼의 자리수를 늘린다.
      2) 응용단(Java, JavaScript, PHP, 개발Tool)에서 입력값의 대한 자리수 체크한다.
      3) 위 1,2에 대한 작업을 완료한 다음에 Insert문을 사용하면 됩니다.

  • ?
    유니콘 2012.04.04 20:36

    답변 감사드립니다

     

    그런데 저는 길이체크를 하거나 바이트 체크를 하거나 저장공간을 늘리는 작업 없이 데이터를 담을 수 있는 그릇(필드크기)의

     

    크기가 작으면 자동으로 삽입이 이뤄지지 않기를 바라고 있습니다  어떠한 설정을 통해 그렇게 만들수는 없는지요

  • ?
    seongjoon 2012.04.04 22:50

    CUBRID는 varchar(n), char(n)에서 n의 길이보다 큰 데이터가 들어오는 경우 n의 길이만큼 절삭해서 들어가는 것을 기본 스펙으로 하고 있으며, 말씀하신 부분과 같이 특별한 설정을 통해 요청하신 부분을 처리하는 부분은 없습니다.

    이전의 답변과 같이 응용쪽에서 처리를 하는 방법을 권장해 드립니다.

  • ?
    유니콘 2012.04.05 00:16

    답변 감사드립니다


List of Articles
번호 제목 글쓴이 날짜 조회 수
공지 SQLGate for CUBRID 영구 무료 라이선스 제공 file admin 2020.04.09 4255
1796 cubrid메니저에서 호스트 연결이 되지 않습니다. 2 그리나다 2014.04.01 10681
1795 맥에서 cubrid query browser 실행이 안됩니다. 1 zbqmflem12345 2014.03.29 10964
1794 MSSQL같이 레코드 복사는 안 되나요? 1 하늘나무 2014.03.28 10490
1793 NUMBER(38,2) 타입에 '12.34'를 입력하면 반올림되어 13으로 저장됩니다. 1 secret 달빛추격자 2014.03.28 7
1792 큐브리드 / bin 폴더에 dmp 파일이 많이 생성됩니다 7 secret 종이 2014.03.28 20
1791 cubrid 서버 상태 확인 화면 1 secret 알칸펠 2014.03.26 4
1790 원격접속 실패 1 모냐모냐 2014.03.26 9265
1789 마이그레이션 중 중단 1 file chocob 2014.03.26 9294
1788 마이그레이션 후 에러파일 생성 안됨 문제 2 chocob 2014.03.25 6911
1787 마이그레이션 에러 2 secret chocob 2014.03.24 5
1786 큐브리드 매니저 데이터 수정 및 삭제, 테이블 삭제가 안됩니다 3 secret nightow 2014.03.22 8
1785 용량은 충분한데 Out of disk space in database 라는 로그가 남으면서 마이그레이션이 안됩니다. 4 file 리리라 2014.03.20 11301
1784 VB 6.0 환경에서 레코드 컨트롤 시에 런타임 오류가 발생합니다. 1 red03410 2014.03.20 10401
1783 큐브리즈 2008 R4.0 트랜잭션 에러 1 이용훈 2014.03.20 8417
1782 최신 큐브리드 버전 매니저프로그램 사용불가 관련.. 4 심판짱 2014.03.19 7332
1781 큐브리드 매니저 접속시 502 에러가 나옵니다. 4 광황제 2014.03.19 11669
1780 멀티코어 활용을 위한 설정 혹은 구성 관련하여 문의드립니다. 1 file 리리라 2014.03.19 7538
1779 temporary database volumn을 삭제(해제)할 수 있는 방법이 있는지 궁금합니다. 1 리리라 2014.03.18 5809
1778 큐브리드 DB 복구 관련 문의 1 red03410 2014.03.18 6885
1777 where in (...) 구문을 쓸때 numberic 타입의 컬럼은 사용할 수 없나요? 1 리리라 2014.03.18 8288
Board Pagination Prev 1 ... 105 106 107 108 109 110 111 112 113 114 ... 199 Next
/ 199

Contact Cubrid

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