Faktisk afkorter MySQL strenge til kolonnebredden som standard. Den genererer en advarsel, men tillader indsatsen.
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 |
+------------+
Hvis du indstiller den strenge SQL-tilstand, forvandler den advarslen til en fejl og afviser indsættelsen.
Til din kommentar:SQL-tilstand er en MySQL Server-konfiguration. Det er sandsynligvis ikke PDO, der forårsager det, men på den anden side er det muligt, fordi enhver klient kan indstille SQL-tilstand for sin session.
Du kan hente den aktuelle globale eller session sql_mode værdi med følgende udsagn:
SELECT @@GLOBAL.sql_mode;
SELECT @@SESSION.sql_mode;
Standarden skal være en tom streng (ingen tilstande angivet). Du kan indstille SQL-tilstand i din my.cnf
fil, med --sql-mode
mulighed for mysqld eller ved at bruge et SET
erklæring.
Opdatering:MySQL 5.7 og nyere indstiller streng tilstand som standard. Se https://dev.mysql.com/doc/ refman/5.7/da/sql-mode.html