2011-11-17 40 views
5

Tôi đang sử dụng java và MySQL. Tôi đang cố gắng chèn một giá trị vào một bảng.MysqlDataTruncation: Cắt ngắn dữ liệu: Ngoài giá trị dải ô cho cột 'cột' tại hàng 1

Khi tôi chèn, tôi nhận được ngoại lệ này:

com.mysql.jdbc.MysqlDataTruncation: Data truncation: Out of 
range value for column 'idPxxx' at row 1 

Chỉ 5% chèn tạo ra ngoại lệ này, những người khác làm việc. Lỗi có nghĩa là gì và làm thế nào để ngăn chặn nó?

+1

xem Câu hỏi này http://stackoverflow.com/questions/73109/mysql-data-truncation-error –

Trả lời

9

Điều đó có nghĩa là dữ liệu bạn đang lưu trữ trong idPxxx không phù hợp. Ví dụ: một chuỗi có thể quá dài hoặc một số quá lớn.

Kiểu dữ liệu của idPxxx là gì? Và những gì bạn đang cố gắng để lưu trữ trong nó?

+0

Cảm ơn bạn, đó là những gì tôi nghĩ nhưng vấn đề này chỉ xảy ra với 5% dữ liệu được gửi và khi tôi lặp lại thử nghiệm tương tự cũng xảy ra. – Khaledez

+0

@Khaledez sao bạn không trả lời được những câu hỏi tôi đã trả lời? – Ariel

+0

Kiểu dữ liệu là 'Unsigned INT (64)' và tôi đang cố chèn giá trị '2000'. Một lần nữa, tôi chèn vào bảng 'X' có khóa ngoài' idPxxx' từ bảng 'Y' và giá trị' idPxxx' tồn tại trong bảng 'Y'. – Khaledez

2

Làm thế nào để tạo ra ngoại lệ này trên MySQL console:

mysql> create table penguin (mydecimal decimal(9,8)); 
Query OK, 0 rows affected (0.02 sec) 

mysql> insert into penguin values (1234.1234); 
Query OK, 1 row affected, 1 warning (0.01 sec) 

mysql> show warnings; 
+---------+------+----------------------------------------------------+ 
| Level | Code | Message           | 
+---------+------+----------------------------------------------------+ 
| Warning | 1264 | Out of range value for column 'mydecimal' at row 1 | 
+---------+------+----------------------------------------------------+ 
1 row in set (0.00 sec) 

mysql> select * from penguin; 
+------------+ 
| mydecimal | 
+------------+ 
| 9.99999999 | 
+------------+ 
1 row in set (0.00 sec) 

Bạn cố gắng nhồi nhét 1234 vào một cột có thể kéo dài tối đa 9,9 lặp đi lặp lại. Chú ý hàng vẫn được chèn vào.

Bạn có thể lấy giao diện điều khiển MySQL để ngăn chặn chuyển đổi này sử dụng chế độ nghiêm ngặt:

mysql> set sql_mode=STRICT_ALL_TABLES; 
Query OK, 0 rows affected (0.00 sec) 

mysql> insert into penguin values (5678.5678); 
ERROR 1264 (22003): Out of range value for column 'mydecimal' at row 1 

Các chèn lệnh thất bại trong cố gắng thêm một hàng thứ hai để chim cánh cụt:

mysql> select * from penguin; 
+------------+ 
| mydecimal | 
+------------+ 
| 9.99999999 | 
+------------+ 
1 row in set (0.00 sec) 

Solutions

  1. Mở rộng kích thước của kiểu dữ liệu trong cột của bạn để chấp nhận giá trị bạn đặt trong đó.
  2. Thu nhỏ kích thước của giá trị mà bạn đang cố gắng nhồi nhét vào một loại dữ liệu nhỏ.
0

Đối với tôi vấn đề là kiểu dữ liệu chưa được ký, việc xóa cờ đã khắc phục sự cố của tôi.

Các vấn đề liên quan