Eigenlijk kapt MySQL strings standaard af tot de kolombreedte. Het genereert een waarschuwing, maar laat de invoeging toe.
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 |
+------------+
Als u de strikte SQL-modus instelt, verandert de waarschuwing in een fout en wordt de invoeging geweigerd.
Over uw opmerking:SQL-modus is een MySQL Server-configuratie. Het is waarschijnlijk niet de PDO die dit veroorzaakt, maar aan de andere kant is het mogelijk, omdat elke client de SQL-modus voor zijn sessie kan instellen.
U kunt de huidige globale of sessie sql_mode-waarde ophalen met de volgende instructies:
SELECT @@GLOBAL.sql_mode;
SELECT @@SESSION.sql_mode;
De standaard moet een lege tekenreeks zijn (geen modi ingesteld). U kunt de SQL-modus instellen in uw my.cnf
bestand, met de --sql-mode
optie voor mysqld, of gebruik een SET
verklaring.
Update:MySQL 5.7 en hoger stelt standaard de strikte modus in. Zie https://dev.mysql.com/doc/ refman/5.7/en/sql-mode.html