MySQL tự động ép kiểu (type juggling) khi so sánh chuỗi với số: chuỗi được chuyển thành số bằng cách lấy số ở đầu chuỗi. Chuỗi không bắt đầu bằng số thành 0.
Ví dụ minh họa
Tạo bảng so sánh VARCHAR vs INT:
mysql> CREATE TABLE DemoTable1852 (Value1 VARCHAR(20), Value2 INT);
mysql> INSERT INTO DemoTable1852 VALUES('1John',1),('John',1),('1',1),('John1',1);
So sánh:
mysql> SELECT Value1, Value2, Value1=Value2 AS Result FROM DemoTable1852;
Kết quả:
+--------+--------+--------+ | Value1 | Value2 | Result | +--------+--------+--------+ | 1John | 1 | 1 | -- '1John' -> 1 | John | 1 | 0 | -- 'John' -> 0 | 1 | 1 | 1 | -- '1' -> 1 | John1 | 1 | 0 | -- 'John1' -> 0 +--------+--------+--------+
Cảnh báo: MySQL phát warning "Truncated incorrect INTEGER value". Nên dùng CAST hoặc so sánh cùng kiểu để tránh logic ngầm hiểu.