Cho phép mysql ngày không hợp lệ
Khi đặt giá trị mặc định cho cột kiểu dữ liệu DATE hoặc DATETIME trong MySQL, nếu bạn sử dụng ‘0000-00-00 00. 00. 00’ làm giá trị mặc định, bạn có thể gặp phải lỗi này Show
Hoặc khi chèn giá trị
Lý do là, kể từ phiên bản 5. 7, MySQL bật Chế độ nghiêm ngặt SQL theo mặc định và không cho phép '0000-00-00' làm giá trị ngày hợp lệ Các bước để sửa lỗi này 1. Kiểm tra chế độ MySQL Bạn có thể xem chế độ SQL từ tệp cấu hình MySQL hoặc chạy lệnh này
2. Tắt chế độ nghiêm ngặt Nếu chế độ nghiêm ngặt được bật, thì một trong hai hoặc cả
Hoặc
3. Khởi động lại MySQL Sau đó khởi động lại MySQL và bạn sẽ có thể sử dụng '0000-00-00' làm giá trị cho cột NGÀY hoặc NGÀY Cần một công cụ GUI tốt cho cơ sở dữ liệu? Thông tin trong bài viết này được cung cấp nguyên trạng và được sử dụng theo quyết định riêng. Tùy thuộc vào (các) công cụ được sử dụng, (các) tùy chỉnh và/hoặc các yếu tố khác hỗ trợ liên tục cho giải pháp bên dưới có thể không được cung cấp bởi Bộ phận hỗ trợ của Qlik Chuyển đổi ngàyMột số cơ sở dữ liệu cho phép các giá trị ngày giờ không theo tiêu chuẩn mà khi được sao chép sang cơ sở dữ liệu đích không cho phép cùng một giá trị "Xấu" thì tác vụ sẽ bị lỗi Ví dụ về điều này là tác vụ sao chép có mySQl làm nguồn và Snowflake làm đích. Lỗi nhật ký tác vụ00010461. 2021-07-23T17. 09. 30 [TARGET_LOAD ]E. RetCode. SQL_ERROR SqlState. 22007 Lỗi bản địa. Tin nhắn 100035. Dấu thời gian '0000-00-00 00. 00. 00' không được công nhận Bất kỳ cách nào chúng ta cũng có thể áp dụng chuyển đổi toàn cầu trên dữ liệu để thay đổi dữ liệu từ 0000-00-00 00. 00. 00 chuyển đổi toàn cầuVì không có cách nào dễ dàng để biết liệu một bảng có luôn có giá trị dữ liệu tốt hay không, nơi tốt nhất để thực hiện kiểu kiểm tra và thay thế này là trên Màn hình chuyển đổi toàn cục của Tác vụ. Có một loại chuyển đổi toàn cục được gọi là Thay thế giá trị cột mà chúng tôi sẽ sử dụng và nó sẽ áp dụng cho tất cả các trường ngày trong tất cả các bảng của tác vụ Mã chuyển đổi hoàn chỉnh như sau
Thay thế giá trị cột. ảnh chụp màn hình Bộ 4 ảnh chụp màn hình sau đây cho biết vị trí và cách định cấu hình Giải pháp chuyển đổi toàn cầu Thay thế giá trị cộtKhi ở Màn hình chuyển đổi toàn cầu, chọn Thay thế giá trị cột Phạm vi chuyển đổiChọn Loại dữ liệu "DATETIME" để định cấu hình tác vụ áp dụng loại này cho tất cả các trường thuộc loại Ngày Giờ Hành động chuyển đổiNhấp vào Tạo biểu thức để thêm mã chuyển đổi Trình tạo biểu thứcThêm mã chuyển đổi để kiểm tra giá trị ngày "Không hợp lệ" trong trường hợp này là chuỗi rỗng hoặc chuỗi rỗng, sau đó đặt giá trị thành "1970-01-01 00. 00. 00" là ngày có thể chấp nhận được đối với mục tiêu Snowflake Lý do điều này không thành công là do xác thực ngày bổ sung được thêm vào MySql 8.Bạn có thể tìm thấy hành vi mới và giải pháp khả thi trong danh sách dấu đầu dòng "Hãy nhận biết một số thuộc tính nhất định của diễn giải giá trị ngày trong MySQL. " tìm thấy trong liên kết này. đây. https. // nhà phát triển. mysql. com/doc/refman/8. 0/vi/ngày giờ. html "Máy chủ yêu cầu các giá trị tháng và ngày phải hợp lệ và không chỉ trong phạm vi từ 1 đến 12 và 1 đến 31, tương ứng. Khi chế độ nghiêm ngặt bị tắt, các ngày không hợp lệ như '2004-04-31' được chuyển đổi thành '0000-00-00' và cảnh báo được tạo. Với chế độ nghiêm ngặt được bật, ngày không hợp lệ sẽ tạo ra lỗi. Để cho phép những ngày như vậy, hãy bật ALLOW_INVALID_DATES. Xem Phần 5. 1. 11, “Chế độ máy chủ SQL”, để biết thêm thông tin. " Liên kết này cũng đề cập đến sự thay đổi. https. // stackoverflow. com/questions/58431136/how-to-fix-mysql-8-error-codes-1525-and-1292 Nó cũng có bản demo rất hay. https. // db câu đố. anh/?rdbms=mysql_8. 0&fiddle=f48ec79ab2e127a795942b1c2dc25cab Vì vậy, để cho phép loại ngày xấu này được lưu mà không gặp lỗi hoặc không bị cơ sở dữ liệu chuyển đổi, bạn có thể thử thêm ALLOW_INVALID_DATES vào sqlMode. Bạn có thể thực hiện việc này trên máy chủ như trong bản trình diễn được liên kết ở trên hoặc thông qua thuộc tính url kết nối JDBC sql_mode hoặc bằng cách đặt sql_mode trong tệp cấu hình trên máy chủ. Ví dụ. qua url kết nối. jdbc. mysql. //localhost/test?user=sqluser&password=sqluserpw&sessionVariables=sql_mode='ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION,ALLOW_INVALID_DATES' thông qua tệp cấu hình. sessionVariables=sql_mode='ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION,ALLOW_INVALID_DATES' Lưu ý. Có những thay đổi khác đối với kiểu dữ liệu ngày tháng. Nếu bạn cần lưu ngày không hợp lệ do người dùng nhập, bạn có thể thử lưu dưới dạng chuỗi thay vì ngày. Điều đó sẽ tách biệt quy trình của bạn khỏi các thay đổi xác thực ngày khác không được thảo luận ở trên. Tài nguyên. https. // stackoverflow. com/questions/58431136/how-to-fix-mysql-8-error-codes-1525-and-1292 https. // vài tháng. com/database-blog/moving-mysql-57-mysql-80-what-you-nên-biết https. // nhà phát triển. mysql. com/doc/refman/8. 0/en/mysql-tóm lại. html https. // nhà phát triển. mysql. com/doc/refman/8. 0/vi/ngày giờ. html https. // nhà phát triển. mysql. com/doc/refman/8. 0/en/sql-mode. html https. // db câu đố. anh/?rdbms=mysql_8. 0&fiddle=f48ec79ab2e127a795942b1c2dc25cab Làm cách nào để cho phép ngày không hợp lệ trong MySQL?Khi tắt chế độ nghiêm ngặt, các ngày không hợp lệ như '2004-04-31' được chuyển thành '0000-00-00' và cảnh báo được tạo. Với chế độ nghiêm ngặt được bật, ngày không hợp lệ sẽ tạo ra lỗi. Để cho phép những ngày như vậy, hãy bật ALLOW_INVALID_DATES .
Làm cách nào để xác thực ngày trong MySQL?CẬP NHẬT . bật chế độ SQL NO_ZERO_DATE. ĐẶT PHIÊN sql_mode = 'NO_ZERO_DATE' hoặc nếu không, hãy sử dụng một chức năng khác, chẳng hạn như TO_DAYS để xác minh tính hợp lệ của ngày. CHỌN m_dob TỪ thủy thủ WHERE TO_DAYS(STR_TO_DATE(m_dob, '%d-%b-%Y')) KHÔNG PHẢI LÀ NULL Làm cách nào để cho phép ngày không trong MySQL?Để không cho phép phần 0 của tháng hoặc ngày trong ngày, bật chế độ NO_ZERO_IN_DATE . MySQL cho phép bạn lưu trữ giá trị “không” 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 dữ liệu và không gian chỉ mục hơn. Để không cho phép '0000-00-00' , hãy bật chế độ NO_ZERO_DATE.
Làm cách nào để đặt sql_mode trong MySQL 8?Bạn có thể đặt chế độ SQL mặc định (để khởi động mysqld) bằng tùy chọn --sql-mode. Sử dụng câu lệnh SET [GLOBAL. SESSION] sql_mode='modes ' , bạn có thể thay đổi cài đặt từ bên trong kết nối, cục bộ thành kết nối hoặc có hiệu lực trên toàn cầu. |