Cấu hình sql_mode vĩnh viễn qua file my.ini/my.cnf
sql_mode kiểm soát hành vi SQL (strict mode, chỉ phép group by, v.v.). Thay đổi runtime chỉ có hiệu lực cho session hoặc global cho đến khi restart. Để vĩnh viễn, sửa file cấu hình.
Các bước trên Windows
- Tìm thư mục data:
SELECT @@datadir;→ ví dụC:\ProgramData\MySQL\MySQL Server 8.0\Data\ - Tìm file
my.ini(thường ởC:\ProgramData\MySQL\MySQL Server 8.0\my.ini) hoặcmy.cnftrong thư mục data. - Mở file bằng Notepad (Run as Administrator).
- Thêm/sửa dưới section
[mysqld]:sql_mode = "STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION"Hoặc mode truyền thống:
sql_mode = "TRADITIONAL" - Lưu file, khởi động lại dịch vụ MySQL:
net stop mysql80 net start mysql80 - Kiểm tra:
SELECT @@sql_mode;
Các sql_mode phổ biến
| Mode | Mô tả |
|---|---|
| STRICT_TRANS_TABLES | Từ chối giá trị không hợp lệ (truncate, out of range) trong transactional tables |
| NO_ENGINE_SUBSTITUTION | Báo lỗi nếu engine yêu cầu không có, không tự thay thế |
| ONLY_FULL_GROUP_BY | Bắt buộc cột SELECT phải có trong GROUP BY hoặc aggregate (mặc định 5.7+) |
| NO_ZERO_DATE | Không cho phép '0000-00-00' |
| NO_ZERO_IN_DATE | Không cho phép tháng/ngày = 0 |
| TRADITIONAL | Tập hợp các mode strict (STRICT_TRANS_TABLES, STRICT_ALL_TABLES, NO_ZERO_IN_DATE, NO_ZERO_DATE, ERROR_FOR_DIVISION_BY_ZERO, NO_ENGINE_SUBSTITUTION) |