2013-08-27 29 views
21

Tôi có hai phiên bản MySQL. Người đầu tiên cắt xén chuỗi khi chèn khi dữ liệu quá dài. Một trong 2 đặt ra một lỗi:Thiết lập cắt lỗi/lỗi đường dẫn quá dài của MySQL

ERROR 1406 (22001): Data too long for column 'xxx' at row 1

Tôi muốn một trong 2 truncate dữ liệu là tốt. Có bất kỳ cài đặt MySQL nào để quản lý hành vi này không?

+1

filetype & chiều dài của cột là gì? bạn có cùng giá trị, cho cùng một tệp trên cả hai máy chủ –

+0

@ metalfight-user868766 Không hiểu câu hỏi của bạn về loại tệp. Động cơ là InnoDB, kiểu cột - varchar. Chiều dài cột không đổi. Và có, các cơ sở dữ liệu gần như giống hệt nhau. –

+0

Lỗi nào? – 7alhashmi

Trả lời

28

Bạn có thể tắt STRICT_TRANS_TABLESSTRICT_ALL_TABLES. Điều này cho phép cắt ngắn tự động chuỗi đã chèn.

Trích dẫn từ MySQL Documantation.

Strict mode controls how MySQL handles invalid or missing values in data-change statements such as INSERT or UPDATE. A value can be invalid for several reasons. For example, it might have the wrong data type for the column, or it might be out of range. A value is missing when a new row to be inserted does not contain a value for a non-NULL column that has no explicit DEFAULT clause in its definition. (For a NULL column, NULL is inserted if the value is missing.)

tham khảo: MySQL Server SQL Modes

+0

đây là câu trả lời cho vấn đề của tôi cũng –

+0

BTW - phương pháp dưới đây không nên được coi là hợp lệ - bạn cần phải đặt chế độ sql trong my.cnf của bạn - nhưng bạn không cần NO_AUTO_CREATE_USER hoặc bất kỳ khác, bạn chỉ cần đảm bảo rằng bạn không có STRICT_TRANS_TABLES hoặc STRICT_ALL_TABLES hoặc bất kỳ điều gì khác thúc đẩy cảnh báo này. Trong thực tế sql-mode = '' cũng sẽ sửa lỗi. – Ross

9

Nếu chế độ SQL nghiêm ngặt không được bật và bạn chỉ định giá trị cho cột CHAR hoặc VARCHAR vượt quá độ dài tối đa của cột, giá trị được cắt ngắn để vừa và cảnh báo được tạo. Để cắt ngắn các ký tự không gian, bạn có thể gây ra lỗi (thay vì cảnh báo) và ngăn chặn chèn giá trị bằng cách sử dụng chế độ SQL nghiêm ngặt. Xem Phần 6.1.7, “Chế độ SQL máy chủ”.

Làm thế nào bạn có thể thay đổi nó: http://dev.mysql.com/doc/refman/5.7/en/sql-mode.html


Tìm thấy hai cách để vô hiệu hóa chế độ nghiêm ngặt:

  1. thêm bên dưới để my.cnf

    sql-mode = "NO_AUTO_CREATE_USER , NO_ENGINE_SUBSTITUTION "

  2. cách đang sử dụng giao diện điều khiển mysql.

    SET @@ global.sql_mode = '';

Hãy kiểm tra chúng trước khi chạy trên môi trường sản xuất.

+0

SET @@ global.sql_mode = ''; làm việc như một quyến rũ –

1

nếu bạn sử dụng cpanel,

thay

sql-mode="NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION" 

vào /usr/my.cnf

để

sql-mode="" 

chạy

/etc/init.d/mysql restart 
Các vấn đề liên quan