На самом деле 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