Всъщност MySQL съкращава низовете до ширината на колоната по подразбиране. Той генерира предупреждение, но позволява вмъкването.
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 |
+------------+
Ако зададете строг SQL режим, той превръща предупреждението в грешка и отхвърля вмъкването.
Относно вашия коментар:SQL режимът е конфигурация на MySQL сървър. Вероятно не PDO го причинява, но от друга страна е възможно, защото всеки клиент може да зададе SQL режим за своята сесия.
Можете да извлечете текущата глобална или сесия sql_mode стойност със следните изрази:
SELECT @@GLOBAL.sql_mode;
SELECT @@SESSION.sql_mode;
По подразбиране трябва да е празен низ (не са зададени режими). Можете да зададете режим SQL във вашия my.cnf
файл, с --sql-mode
опция за mysqld или с помощта на SET
изявление.
Актуализация:MySQL 5.7 и по-нови задават строг режим по подразбиране. Вижте https://dev.mysql.com/doc/ refman/5.7/en/sql-mode.html