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

Tại sao một cột văn bản không thể có giá trị mặc định trong MySQL?

Windows MySQL v5 gặp 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?

Ngoài ra, hãy xem nỗ lực sửa lỗi này là lỗi # 19498 trong MySQL Bugtracker:

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 có ĐỊNH NGHĨA" là một lỗi, trong khi trên các nền tảng khác, quy tắc này thường là một cảnh báo. Mặc dù không phải là một lỗi, nhưng bạn có thể bị mắc kẹt bởi điều này nếu bạn viết mã trên một 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 / TEXT không được có giá trị mặc định" trả về khoảng 2.940 kết quả trên Google. Hầu hết chúng là 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 hoạt động trên hệ thống khác.

Hiện tôi đang gặp phải sự cố tương tự trên một ứng dụng web mà 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 phpMyAdmin mới nhất để 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 bộ chèn trên Windows (hoạt động tốt trên triển khai Linux), tôi nhận được lỗi không có mặc định trên cột ABC. Tôi cố gắng tạo lại cục bộ bảng với giá trị 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, việc không duy trì khả năng tương thích cơ bản giữa các nền tảng là không thể chấp nhận được 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ế nó 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'");


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySql tổng các phần tử của một cột

  2. Định cấu hình sao chép cơ sở dữ liệu MySQL Master-Master

  3. Cú pháp TẠO CƠ SỞ DỮ LIỆU SQL - Được DBMS liệt kê

  4. Cách xóa cơ sở dữ liệu trong MySQL / MariaDB

  5. PDO lấy ID cuối cùng được chèn