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
- 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 đó.
- 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ỏ.
Nguồn
2014-01-13 00:19:06
xem Câu hỏi này http://stackoverflow.com/questions/73109/mysql-data-truncation-error –