MYSQL 이상한 현상... 0 12 837

by 개리끼리 [MySQL] [2017.01.31 15:00:01]


MYSQL에서 이상한 현상을 겪고 있습니다.

TOAD로 테이블을 조회하면

NO VAL
0001 첫번째
0002 두번째
0003 세번째

위와 같이 맨 첫번째 데이터만 글자크기가 크게 표시됩니다.

문제는 저게 조회가 안됩니다.

SELECT * FROM TABLE_NM WHERE NO='0001';

이렇게 하면 조회가 안됩니다. 0002, 0003은 물론 조회가 되구요.

혹시 토드에서만 안되나 싶어서 CMD창에서 해봤지만 똑같습니다.

다음은 글자 인코딩에 문제가 있는건가 싶어

UPDATE TABLE_NM SET

NO = '0001'

WHERE VAL='첫번째'; 

이런식으로 '0001'을 직접 타이핑하여 넣어봤지만 똑같네요...

데이터형은 VARCHAR(50)으로 해놨습니다.

도대체 무슨 이유로 저렇게 되는지 모르겠습니다...

by 마농 [2017.01.31 17:03:50]

혹시?
글자가 크게 보이는게 아니라 전각문자('0001')로 저장되어 있는 것 아닌지요?

SELECT no, val
     , HEX(no) hex_no
     , HEX('0001') hex_no_single
     , HEX('0001') hex_no_multi
  FROM table_nm
;

 


by 개리끼리 [2017.01.31 17:19:33]

마농님의 코드를 참고하여

SELECT * FROM table_nm WHERE no='0001';

SELECT * FROM table_nm WHERE no=HEX('0001');

위 두 쿼리를 입력해 보았으나 나오지 않았습니다.

하지만 SELECT HEX(no) FROM table_nm; 이렇게 쿼리를 돌려보니

다른데이터들은 303030 이렇게 시작하는데

'0001' 이 문제의 데이터만 EFBBBF303030 이런식으로 가네요.

왠지 뭔가 풀려가는 느낌입니다. ㅎㅎ

답변감사합니다.


by 개리끼리 [2017.01.31 18:06:28]

해결했습니다~

앞에 붙는 EF BB BF 이 문자가

BOM이라고 해당 데이터가 UTF-8 언어라는걸 나타내주는 코드라고 하네요.

그래서 아래와 같이 EF BB BF 문자를 없애주는걸로 해결했습니다.

UPDATE table_nm SET
   FRM_NO = UNHEX(SUBSTRING(HEX('0001'),7))
WHERE val= '첫번째';

감사합니다.


by jkson [2017.01.31 18:27:44]

그렇다고 해도 살짝 이해가 안 되는 게..

UPDATE TABLE_NM SET

NO = '0001'

WHERE VAL='첫번째'; 

이렇게 UPDATE 하신 후에 다시 조회해도 안 되신다고 하셨는데..

UPDATE할 때 CHARACTER SET과 조회할 때가 다를 수가 있나요? 신기하네요.


by 개리끼리 [2017.02.01 08:59:26]

그게 업데이트를 하는데 안먹힙니다.

0 raws affected 이렇게 나오더라구요,

둘다 0001이니 똑같은 값이라 생각하고 업데이트가 안먹히는거죠


by 마농 [2017.02.01 09:24:31]

업데이트가 안먹히는게 아니라, 조건절이 틀려서 그렇겠죠.

업데이트 하기전 똑같은 조건으로 Select 부터 해보세요.


by jkson [2017.02.01 09:28:53]

그렇다면 WHERE VAL='첫번째' 이 조건도 안 먹혔다는 거네요. 데이터를 이관하신 건가보죠?


by 개리끼리 [2017.02.01 09:41:37]

SELECT * FROM table_nm WHERE VAL='첫번째';

하면 (0001, 첫번째)가 조회가 됐었습니다.

0001 을 제외한 데이터들은 UTF-8헤더가 붙지 않은 상태입니다,


by jkson [2017.02.01 09:51:56]

더 이상하네요. SELECT할 때 WHERE VAL='첫번째' 조건은 먹히는데 UPDATE할 때 WHERE VAL='첫번째'은 안 먹힌다니;;

mysql은 어떤지 모르겠지만 update 대상은 where 조건으로 정해지는 거구요.

where 조건이 select절과 똑같은데 select할 때는 1건이 나오는데 update할 때 0 raws affected 되었다는 건 말이

안 되는 상황 같네요. where 조건이 달랐을 것 같아요.


by 개리끼리 [2017.02.01 10:29:26]

헉 죄송합니다.

제가 잘못한건가 해서 어제처럼 되돌리고

업데이트 쿼리를 돌리니 1 rows affected가 뜹니다.

그런데 0001 앞에 EFBBBF 가 붙은 상태인건 여전합니다.

그리고 업데이트 쿼리를 다시 돌리니

0 rows affected가 뜨네요


by 마농 [2017.02.01 10:32:04]

툴 자체에서 쓰레기값이 붙는 듯 하네요.

결과가 오락가락 하는 것은. 혹시 실수한 것은 없는지 다시 여러번 테스트 해보시기 바랍니다.


by 개리끼리 [2017.02.01 10:38:54]

뭐가 문제인지...

다른 테이블에서 해봤더니

UPDATE table_nm SET no='0001' WHERE val='첫번째';

이게 먹히네요;

흠;;;

 

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입