実際、MySQLはデフォルトで文字列を列幅に切り捨てます。警告を生成しますが、挿入を許可します。
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 |
+------------+
厳密なSQLモードを設定すると、警告がエラーに変わり、挿入が拒否されます。
コメントを再確認してください。SQLモードはMySQLサーバー構成です。それを引き起こしているのはおそらくPDOではありませんが、一方で、どのクライアントもそのセッションにSQLモードを設定できるため可能です。
次のステートメントを使用して、現在のグローバル値またはセッションsql_mode値を取得できます。
SELECT @@GLOBAL.sql_mode;
SELECT @@SESSION.sql_mode;
デフォルトは空の文字列(モードは設定されていません)である必要があります。 my.cnf
でSQLモードを設定できます --sql-mode
を含むファイル mysqldのオプション、またはSET
を使用する ステートメント。
更新:MySQL 5.7以降では、デフォルトで厳密モードが設定されています。 https://dev.mysql.com/doc/を参照してくださいrefman / 5.7 / en / sql-mode.html