Việc xử lý giá trị số MySQL ngoài phạm vi cho phép của kiểu dữ liệu cột phụ thuộc vào SQL mode theo các cách sau:
(A) Bật SQL strict mode - Khi strict SQL mode được bật, MySQL trả về lỗi khi nhập giá trị ngoài phạm vi. Trong trường hợp này, việc chèn một số hoặc tất cả giá trị sẽ thất bại.
Ví dụ, ta tạo bảng với hai cột có kiểu TINYINT và UNSIGNED TINYINT:
mysql> CREATE TABLE counting(Range1 TINYINT, Range2 TINYINT UNSIGNED); Query OK, 0 rows affected (0.14 sec)
Bây giờ bật strict SQL mode:
mysql> SET SQL_MODE = 'traditional'; Query OK, 0 rows affected (0.00 sec)
Bây giờ, nếu thử chèn giá trị ngoài phạm vi, MySQL báo lỗi và cả hai lần chèn đều thất bại, kiểm tra bằng truy vấn:
mysql> INSERT INTO Counting(Range1, Range2) VALUES(256, 256); ERROR 1264 (22003): Out of range value for column 'Range1' at row 1 mysql> SELECT * FROM counting; Empty set (0.00 sec)
(B) Tắt SQL strict mode - Khi strict SQL mode tắt, giá trị bị cắt bớt bởi MySQL đến đầu cuối phù hợp của kiểu dữ liệu cột và lưu giá trị kết quả. MySQL phản ánh cảnh báo do chuyển đổi gán cột xảy ra vì cắt bớt.
Ví dụ, nếu chèn giá trị sau khi tắt strict mode, MySQL phản ánh cảnh báo và lưu giá trị sau khi cắt đến đầu cuối phù hợp. Hiểu qua các truy vấn dưới:
mysql> SET SQL_MODE = ''; Query OK, 0 rows affected (0.00 sec) mysql> INSERT INTO Counting(Range1, Range2) VALUES(256, 256); Query OK, 1 row affected, 2 warnings (0.02 sec) mysql> SHOW WARNINGS; +---------+------+-------------------------------------------------+ | Level | Code | Message | +---------+------+-------------------------------------------------+ | Warning | 1264 | Out of range value for column 'Range1' at row 1 | | Warning | 1264 | Out of range value for column 'Range2' at row 1 | +---------+------+-------------------------------------------------+ 2 rows in set (0.00 sec) mysql> SELECT * FROM Counting; +--------+--------+ | Range1 | Range2 | +--------+--------+ | 127 | 255 | +--------+--------+ 1 row in set (0.00 sec)