Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

Lỗi MySQL "Data too long for column" - Nguyên nhân và khắc phục


Nguyên nhân

Lỗi xảy ra khi chèn dữ liệu dài hơn độ dài tối đa cho phép của cột. Ví dụ: cột VARCHAR(6) chỉ chứa tối đa 6 ký tự.

Ví dụ tái hiện lỗi

1. Tạo bảng với giới hạn 10 ký tự

mysql> CREATE TABLE DataToolongDemo ( 
-> Name VARCHAR(10) 
-> ); 
Query OK, 0 rows affected (0.55 sec)

2. Chèn dữ liệu vượt quá 10 ký tự

mysql> INSERT INTO DataToolongDemo VALUES('Carol Taylor'); 
ERROR 1406 (22001): Data too long for column 'Name' at row 1

Các giải pháp

Giải pháp 1: Tăng độ dài cột (Khuyên dùng)

mysql> ALTER TABLE DataToolongDemo MODIFY Name VARCHAR(100); 
Query OK, 0 rows affected (2.22 sec) 
Records: 0 Duplicates: 0 Warnings: 0

Giải pháp 2: Đổi sang TEXT/LONGTEXT

mysql> ALTER TABLE DataToolongDemo CHANGE Name Name LONGTEXT; 
Query OK, 0 rows affected (2.22 sec) 
Records: 0 Duplicates: 0 Warnings: 0

Kiểm tra sau khi sửa

mysql> INSERT INTO DataToolongDemo VALUES('Carol Taylor'); 
Query OK, 1 row affected (0.11 sec) 

mysql> SELECT * FROM DataToolongDemo;
+--------------+ 
| Name         | 
+--------------+ 
| Carol Taylor | 
+--------------+ 
1 row in set (0.00 sec)

So sánh kiểu dữ liệu văn bản

KiểuĐộ dài tối đaLưu trữPhù hợp cho
VARCHAR(n)65,535 bytesTrong bảngChuỗi ngắn, độ dài cố định/định trước
TEXT64 KBNgoài bảngVăn bản trung bình
MEDIUMTEXT16 MBNgoài bảngVăn bản dài
LONGTEXT4 GBNgoài bảngVăn bản rất lớn

Khuyến nghị

  • Ưu tiên VARCHAR với độ dài hợp lý cho hiệu năng tốt hơn
  • Chỉ dùng TEXT khi thực sự cần lưu chuỗi rất dài
  • Kiểm tra độ dài dữ liệu đầu vào ở ứng dụng trước khi INSERT
  • Sử dụng STRICT_TRANS_TABLES SQL mode để bắt lỗi sớm