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.

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *


The reCAPTCHA verification period has expired. Please reload the page.