কম্পিউটার টিউটোরিয়াল

MySQL에서 문자열 컬럼에 WHERE 컬럼 = 0 조건을 걸면 어떻게 될까?

문자열 컬럼(VARCHAR 등)을 숫자 0과 비교하면 MySQL은 문자열을 숫자로 변환해 비교합니다. 숫자로 시작하지 않는 문자열은 0으로 변환되어 모든 행이 매칭됩니다(경고 발생).

테이블 생성 및 데이터 삽입

mysql> CREATE TABLE DemoTable1791 (
    -> FirstName VARCHAR(20)
    -> );
Query OK, 0 rows affected (0.00 sec)
mysql> INSERT INTO DemoTable1791 VALUES('David');
Query OK, 1 row affected (0.00 sec)
mysql> INSERT INTO DemoTable1791 VALUES('John');
Query OK, 1 row affected (0.00 sec)
mysql> INSERT INTO DemoTable1791 VALUES('Carol');
Query OK, 1 row affected (0.00 sec)

데이터 조회

mysql> SELECT * FROM DemoTable1791;
+-----------+
| FirstName |
+-----------+
| David     |
| John      |
| Carol     |
+-----------+
3 rows in set (0.00 sec)

문자열 컬럼 = 0 조건 실행

mysql> SELECT * FROM DemoTable1791 WHERE FirstName = 0;
+-----------+
| FirstName |
+-----------+
| David     |
| John      |
| Carol     |
+-----------+
3 rows in set, 3 warnings (0.00 sec)

원인: MySQL은 문자열을 숫자 컨텍스트에서 평가할 때 앞부분 숫자를 파싱합니다. 'David' → 0, 'John' → 0, 'Carol' → 0. 모두 0이 되어 조건 만족. SHOW WARNINGS로 "Truncated incorrect INTEGER value" 경고 확인 가능.

교훈: 타입이 다른 비교는 피하고, 명시적 캐스트(CAST(컬럼 AS UNSIGNED)) 또는 올바른 타입 리터럴('0')을 사용하세요.

  1. MySQL에서 ORDER BY RAND()와 LIMIT으로 랜덤 2개 행 선택하기

  2. MySQL-এ WHERE ক্লজে তারিখ বিয়োগ করে রো সিলেক্ট করা

  3. MySQL-এ WHERE IN ক্লজে NULL হ্যান্ডলিং

  4. MySQL-এ FIND_IN_SET ব্যবহার করে কমা-সেপারেটেড স্ট্রিং লিস্টে মান খুঁজে সিলেক্ট করা