W rzeczywistości MySQL domyślnie skraca ciągi do szerokości kolumny. Generuje ostrzeżenie, ale umożliwia wstawienie.
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 |
+------------+
Jeśli ustawisz ścisły tryb SQL, zamieni ostrzeżenie w błąd i odrzuci wstawienie.
Komentarz:Tryb SQL to konfiguracja serwera MySQL. Prawdopodobnie to nie PDO powoduje to, ale z drugiej strony jest to możliwe, ponieważ każdy klient może ustawić tryb SQL dla swojej sesji.
Możesz pobrać bieżącą wartość globalną lub sesyjną sql_mode za pomocą następujących instrukcji:
SELECT @@GLOBAL.sql_mode;
SELECT @@SESSION.sql_mode;
Wartość domyślna powinna być pustym ciągiem (bez ustawionych trybów). Możesz ustawić tryb SQL w swoim my.cnf
plik, z --sql-mode
opcja dla mysqld lub użycie SET
oświadczenie.
Aktualizacja:MySQL 5.7 i nowsze domyślnie ustawiają tryb ścisły. Zobacz https://dev.mysql.com/doc/ refman/5.7/pl/tryb-sql.html