Ve skutečnosti MySQL ve výchozím nastavení zkracuje řetězce na šířku sloupce. Generuje varování, ale umožňuje vložení.
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 |
+------------+
Pokud nastavíte přísný režim SQL, změní se varování na chybu a odmítne vložení.
K vašemu komentáři:Režim SQL je konfigurace serveru MySQL. Pravděpodobně to není způsobeno PDO, ale na druhou stranu je to možné, protože každý klient může nastavit režim SQL pro svou relaci.
Aktuální globální hodnotu nebo hodnotu relace sql_mode můžete načíst pomocí následujících příkazů:
SELECT @@GLOBAL.sql_mode;
SELECT @@SESSION.sql_mode;
Výchozí by měl být prázdný řetězec (žádné nastavené režimy). Režim SQL můžete nastavit v my.cnf
soubor s --sql-mode
možnost pro mysqld nebo pomocí SET
prohlášení.
Aktualizace:MySQL 5.7 a novější nastavují ve výchozím nastavení přísný režim. Viz https://dev.mysql.com/doc/ refman/5.7/en/sql-mode.html