Tatsächlich kürzt MySQL Strings standardmäßig auf die Spaltenbreite. Es generiert eine Warnung, erlaubt aber die Einfügung.
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 |
+------------+
Wenn Sie den strikten SQL-Modus einstellen, wird die Warnung in einen Fehler umgewandelt und die Einfügung abgelehnt.
Zu Ihrem Kommentar:Der SQL-Modus ist eine MySQL-Server-Konfiguration. Es ist wahrscheinlich nicht PDO, das es verursacht, aber andererseits ist es möglich, weil jeder Client den SQL-Modus für seine Sitzung einstellen kann.
Sie können den aktuellen globalen oder Sitzungs-sql_mode-Wert mit den folgenden Anweisungen abrufen:
SELECT @@GLOBAL.sql_mode;
SELECT @@SESSION.sql_mode;
Der Standardwert sollte eine leere Zeichenfolge sein (keine Modi festgelegt). Sie können den SQL-Modus in Ihrer my.cnf
einstellen Datei, mit dem --sql-mode
Option für mysqld oder mit einem SET
Aussage.
Update:MySQL 5.7 und höher legt standardmäßig den strengen Modus fest. Siehe https://dev.mysql.com/doc/ refman/5.7/en/sql-mode.html