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

Tại sao MySQL không báo lỗi khi so sánh kiểu dữ liệu khác nhau?

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.