Trên thực tế, MySQL cắt ngắn các chuỗi theo chiều rộng cột theo mặc định. Nó tạo ra một cảnh báo, nhưng cho phép chèn.
mysql> create table foo (str varchar(10));
mysql> insert into foo values ('abcdefghijklmnopqrstuvwxyz');
Query OK, 1 row affected, 1 warning (0.00 sec)
mysql> show warnings;
+---------+------+------------------------------------------+
| Level | Code | Message |
+---------+------+------------------------------------------+
| Warning | 1265 | Data truncated for column 'str' at row 1 |
+---------+------+------------------------------------------+
mysql> select * from foo;
+------------+
| str |
+------------+
| abcdefghij |
+------------+
Nếu bạn đặt chế độ SQL nghiêm ngặt, nó sẽ biến cảnh báo thành lỗi và từ chối chèn.
Nhận xét lại của bạn:Chế độ SQL là một cấu hình Máy chủ MySQL. Nó có thể không phải là PDO gây ra nó, nhưng mặt khác có thể, vì bất kỳ ứng dụng khách nào cũng có thể đặt chế độ SQL cho phiên của nó.
Bạn có thể truy xuất giá trị sql_mode toàn phiên hoặc phiên hiện tại bằng các câu lệnh sau:
SELECT @@GLOBAL.sql_mode;
SELECT @@SESSION.sql_mode;
Giá trị mặc định phải là một chuỗi trống (không có chế độ nào được đặt). Bạn có thể đặt chế độ SQL trong my.cnf
của mình tệp, với --sql-mode
tùy chọn cho mysqld hoặc sử dụng SET
tuyên bố.
Cập nhật:MySQL 5.7 trở lên đặt chế độ nghiêm ngặt theo mặc định. Xem https://dev.mysql.com/doc/ refman / 5.7 / en / sql-mode.html