Option1
SSH
nano /usr/local/Cellar/mysql/5.6.20_1/my.cnf
Tìm dòng giống như vậy:
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
Nhận xét dòng trên và khởi động lại máy chủ mysql
mysql.server restart
Lỗi đi rồi!
Option2
Sửa lỗi Mysql error Field doesn’t have a default values
Mình mới tiếp nhận lại một website sử dụng code php (code tay) đã lâu rồi. Có lẽ từ phiên bản php 5.4 và Mysql cũ. Khi chạy trên hosting mới vẫn ok, nhưng khi thêm / sửa bài viết sản phẩm thì bị báo lỗi “… field ‘ABC’ doesn’t have a default values” hay trường dữ liệu không được bỏ trống… kiểu như vậy.
Đại khái là trường dữ liệu trước đây mình không nhập (null / empty) vẫn có thể submit được vào Mysql (database). Nhưng giờ đây thì nó không cho phép như vậy nữa. Khi bạn để trống một trường dữ liệu khi nhập (mặc dù đã khai báo trong table là null) nhưng vẫn bị từ chối và báo lỗi.
Nguyên nhân
Nguyên nhân gây ra là do khác biệt phiên bản MySQL. Hosting bạn sử dụng không cài đặt phiên bản Mysql do người lập trình sử dụng hoạc sử dụng Mariadb thay Mysql. Cụ thể, từ phiên bản Mysql 5.7 một quy tắc mới đã được thêm vào. Đó chính là chế độ nghiêm ngặt (Strict mode) “STRICT_TRANS_TABLES”, nhằm kiểm soát các biến nhập vào không hợp lệ hoạc bị trống (null, empty)…
STRICT_TRANS_TABLES
Cách Khắc phục
Nếu như bạn chỉ bị lỗi như mô tả trên đây thì bạn không cần phải cài lại Database. Bạn chỉ cần tắt chế độ nghiêm ngặt đi là website sẽ hoạt động bình thường.
Disable Strict mode
Trong quản trị Mysql (phpmyadmin), bạn tìm đến Cài đặt (Settings) , tại tab Variables kéo xuống và chọn edit sql mode . Tại đây bạn xóa thuộc tính "STRICT_TRANS_TABLES" đi rồi lưu lại là xong nhé.
hoặc là bạn có thể dùng câu lệnh truy vấn SQL như sau:
SET GLOBAL sql_mode = '';
Cũng nói thêm, nhiều bạn bị lỗi tương tự do nhập thời gian hoạc đặt giá trị mặc định cho DATE hoặc DATETIME. Chẳng hạn bạn không muốn nhập date time cụ thể mà bỏ qua để trống thì sẽ báo lỗi.
'0000-00-00 00:00:00' => Báo lỗi
'1000-01-01 00:00:00'
=> OK
Vậy thôi, bạn có thể thử lại xem có thành công không nhé. Nếu cần thiết có thể restart dịch vụ mysql hoạc khởi động lại server.
Leave a Reply