Windows MySQL v5 đưa ra một lỗi nhưng Linux và các phiên bản khác chỉ đưa ra cảnh báo. Cái này cần được sửa chữa. WTF?
Đồng thời xem nỗ lực khắc phục lỗi này là lỗi # 19498 trong Bugtracker của MySQL:
Bryce Nesbitt vào ngày 4 tháng 4 năm 2008 4:36 chiều:
Trên MS Windows, quy tắc "không DEFAULT" là một lỗi, trong khi trên các nền tảng khác, nó thường là một cảnh báo. Mặc dù không phải là một lỗi, nhưng nó có thể bị mắc kẹt bởi điều này nếu bạn viết mã trên nền tảng khoan dung và sau đó chạy nó trên một nền tảng nghiêm ngặt:
Cá nhân, tôi xem đây là một lỗi. Tìm kiếm "cột BLOB / văn bản không thể có giá trị mặc định" trả về khoảng 2.940 kết quả trên Google. Hầu hết trong số chúng là các báo cáo về sự không tương thích khi cố gắng cài đặt các tập lệnh DB hoạt động trên một hệ thống nhưng không phải là các hệ thống khác.
Bây giờ tôi đang gặp vấn đề tương tự trên một ứng dụng web Tôi đang sửa đổi cho một trong những khách hàng của mình, ban đầu được triển khai trên Linux MySQL v5.0.83-log. Tôi đang chạy Windows MySQL v5.1.41. Ngay cả khi cố gắng sử dụng phiên bản mới nhất của phpMyAdmin để trích xuất cơ sở dữ liệu, nó không báo cáo mặc định cho cột văn bản được đề cập. Tuy nhiên, khi tôi thử chạy một phần chèn trên Windows (hoạt động tốt khi triển khai Linux), tôi nhận được một lỗi không có mặc định trên cột ABC. Tôi cố gắng tạo lại bảng cục bộ với mặc định rõ ràng (dựa trên lựa chọn các giá trị duy nhất cho cột đó) và cuối cùng nhận được cột BLOB / TEXT rất hữu ích không thể có giá trị mặc định .
Một lần nữa, không duy trì khả năng tương thích cơ bản trên các nền tảng là không thể chấp nhận và là một lỗi.
Cách tắt chế độ nghiêm ngặt trong MySQL 5 (Windows):
Chỉnh sửa /my.ini và tìm dòng
sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
Thay thế bằng
sql_mode='MYSQL40'
Khởi động lại dịch vụ MySQL (giả sử rằng đó là mysql5)
net stop mysql5
net start mysql5
Nếu bạn có quyền truy cập root / admin, bạn có thể thực thi
mysql_query("SET @@global.sql_mode='MYSQL40'");