Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

MySQL tự động ép chuỗi thành số trong WHERE để tìm ID cụ thể

Tạo bảng ID dạng chuỗi

mysql> CREATE TABLE DemoTable1390 (
    -> StudentId VARCHAR(20)
    -> );
Query OK, 0 rows affected (0.93 sec)
mysql> INSERT INTO DemoTable1390 VALUES
    -> ('563_John'),('1001_Carol_Taylor'),('David_Miller_789'),('456_AdamSmith');

Dữ liệu

mysql> SELECT * FROM DemoTable1390;
+-------------------+
| StudentId         |
+-------------------+
| 563_John          |
| 1001_Carol_Taylor |
| David_Miller_789  |
| 456_AdamSmith     |
+-------------------+

Truy vấn: WHERE StudentId = 456 (số)

mysql> SELECT * FROM DemoTable1390 WHERE StudentId = 456;

Kết quả: Trả về '456_AdamSmith' (có cảnh báo)

+---------------+
| StudentId     |
+---------------+
| 456_AdamSmith |
+---------------+
1 row in set, 4 warnings (0.02 sec)

Cơ chế: MySQL ép kiểu ngầm (implicit casting) khi so sánh chuỗi với số: lấy phần đầu chuỗi là số (leading numeric part). '456_AdamSmith' -> 456. Chuỗi không bắt đầu bằng số (ví dụ 'David_Miller_789') ép thành 0. Cảnh báo: Truncated incorrect DOUBLE value.