Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Lỗi trong MySQL khi đặt giá trị mặc định cho DATE hoặc DATETIME

Lỗi là do chế độ sql có thể là chế độ nghiêm ngặt theo tài liệu MYSQL 5.7 mới nhất

Tài liệu MySQL 5.7 cho biết :

Chế độ nghiêm ngặt ảnh hưởng đến việc máy chủ có cho phép '0000-00-00' là ngày hợp lệ hay không:Nếu chế độ nghiêm ngặt không được bật, thì '0000-00-00' được cho phép và các đoạn chèn không tạo ra cảnh báo. Nếu chế độ nghiêm ngặt được bật, '0000- 00-00 'không được phép và các phần chèn tạo ra lỗi, trừ khi BỎ QUA cũng được đưa ra. Đối với CHÈN BỎ QUA và CẬP NHẬT BỎ QUA, cho phép '0000-00-00' và các lệnh chèn sẽ tạo ra cảnh báo.

Để kiểm tra chế độ MYSQL

SELECT @@GLOBAL.sql_mode global, @@SESSION.sql_mode session

Tắt chế độ STRICT_TRANS_TABLES

Tuy nhiên, để cho phép định dạng 0000-00-00 00:00:00 bạn phải tắt chế độ STRICT_TRANS_TABLES trong tệp cấu hình mysql hoặc bằng lệnh

Theo lệnh

SET sql_mode = '';

hoặc

SET GLOBAL sql_mode = '';

Sử dụng từ khóa GLOBAL yêu cầu super previliges và nó ảnh hưởng đến hoạt động của tất cả các khách hàng kết nối từ thời điểm đó trở đi

nếu ở trên không hoạt động, hãy truy cập /etc/mysql/my.cnf (theo ubuntu) và nhận xét STRICT_TRANS_TABLES

Ngoài ra, nếu bạn muốn đặt vĩnh viễn chế độ sql khi khởi động máy chủ thì hãy bao gồm SET sql_mode='' trong my.cnf trên Linux hoặc MacOS. Đối với cửa sổ, điều này phải được thực hiện trong my.ini tệp.

Lưu ý

Tuy nhiên, chế độ nghiêm ngặt không được bật theo mặc định trong MYSQL 5.6. Do đó, nó không tạo ra lỗi theo Tài liệu MYSQL 6 mà nói

MySQL cho phép bạn lưu trữ giá trị "0" của '0000-00-00' dưới dạng "ngày giả". Trong một số trường hợp, điều này thuận tiện hơn so với việc sử dụng các giá trị NULL và sử dụng ít không gian dữ liệu và chỉ mục hơn. Để không cho phép '0000-00-00', hãy bật chế độ SQL NO_ZERO_DATE.

CẬP NHẬT

Về vấn đề lỗi như @ Dylan-Su đã nói:

Tôi không nghĩ đây là lỗi mà nó là cách MYSQL phát triển theo thời gian do đó một số thứ được thay đổi dựa trên sự cải tiến hơn nữa của sản phẩm.

Tuy nhiên, tôi có một báo cáo lỗi liên quan khác liên quan đến NOW() chức năng

Trường ngày giờ không chấp nhận mặc định NOW ()

Một ghi chú hữu ích khác [xem Tự động khởi tạo và cập nhật cho TIMESTAMP và DATETIME ]

Kể từ MySQL 5.6.5, các cột TIMESTAMP và DATETIME có thể được tự động khởi tạo và cập nhật thành ngày và giờ hiện tại (nghĩa là dấu thời gian hiện tại). Trước 5.6.5, điều này chỉ đúng với TIMESTAMP và tối đa một cột TIMESTAMP trên mỗi bảng. Các ghi chú sau đây đầu tiên mô tả việc khởi tạo và cập nhật tự động cho MySQL 5.6.5 trở lên, sau đó là sự khác biệt đối với các phiên bản trước 5.6.5.

Cập nhật về NO_ZERO_DATE

Đối với MySQL kể từ 5.7.4, chế độ này không được dùng nữa. Đối với phiên bản trước, bạn phải nhận xét dòng tương ứng trong tệp cấu hình. Tham khảo tài liệu MySQL 5.7 vào NO_ZERO_DATE



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cú pháp TẠO CƠ SỞ DỮ LIỆU SQL - Được DBMS liệt kê

  2. MySql Transpose Row thành cột và cột thành hàng

  3. Tạo phương thức vận chuyển tùy chỉnh trong OpenCart:Phần thứ hai

  4. Hiệu suất MySQL:Giới thiệu về THAM GIA trong SQL

  5. Cách xóa các ký tự đứng đầu và theo sau trong MySQL