일단 어떤 테이블에 varbinary(123) 타입을 가진 컬럼이 하나 있었습니다.
mysql> DESC SomeTable col1;
+-------+----------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+----------------+------+-----+---------+-------+
| col1 | varbinary(123) | YES | | NULL | |
+-------+----------------+------+-----+---------+-------+
1 row in set (0.00 sec)
이 컬럼에는 NULL이 들어 있었습니다.
mysql> SELECT col1 FROM SomTable LIMIT 0, 10 ;
+------+
| col1 |
+------+
| NULL |
| NULL |
| NULL |
| NULL |
| NULL |
| NULL |
| NULL |
| NULL |
| NULL |
| NULL |
+------+
10 rows in set (0.00 sec)
Stored Procedure를 통해서 여러개의 테이블에서 여러개의 컬럼을 읽는 프로그램이었는데... 디버깅 끝에 이 부분부터 꼬이기 시작한다는 것을 발견했습니다.
그리고 희한하게도 이 컬럼을 읽는 부분에서 NULL이 아닌 값을 읽고 있는 것을 발견했습니다.
그리고... 확인결과 ... 진짜 NULL이 아님을 알았고
mysql> SELECT col1 FROM SomeTable WHERE col1 IS NULL LIMIT 0, 10 ;
Empty set (0.00 sec)
비극의 진실은...
mysql> SELECT col1 FROM SomeTable WHERE col1 = "NULL" LIMIT 0, 10 ;
+------+
| col1 |
+------+
| NULL |
| NULL |
| NULL |
| NULL |
| NULL |
| NULL |
| NULL |
| NULL |
| NULL |
| NULL |
+------+
10 rows in set (0.00 sec)
.......... oTL
한 가지 고려해볼 수 있는 사항은
Binary 컬럼은 SELECT시에 *(asterisk)를 쓰지 않고, HEX(col1) 처럼 HEX() 함수로 감싸도록 (마음속으로.. ) 강제 하는 방법.
'정보 공유터' 카테고리의 다른 글
| 한국 귀화시험 기출 문제... (1) | 2010/02/16 |
|---|---|
| [RSS] 네이버 캐스트 Feed (2) | 2010/02/16 |
| 빌드(컴파일, 링크) 속도가 느리다면.... (3) | 2010/02/04 |
| [MySQL] NULL이지만 NULL이 아닌 슬픈 이야기.. (3) | 2010/01/22 |
| [Linux] 콜스택이 깨진 Core 파일 디버깅 하기 (5) | 2010/01/18 |
| [VS] 위대한 발견: Visual Studio 검색창 늘리기 (2) | 2009/12/22 |
| [Vim] 여러 파일 Tab으로 열기 (2) | 2009/10/31 |
