Sebenarnya, MySQL memotong string ke lebar kolom secara default. Ini menghasilkan peringatan, tetapi memungkinkan penyisipan.
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 |
+------------+
Jika Anda menyetel mode SQL yang ketat, ini akan mengubah peringatan menjadi kesalahan dan menolak penyisipan.
Kembali komentar Anda:Mode SQL adalah konfigurasi Server MySQL. Mungkin bukan PDO yang menyebabkannya, tetapi di sisi lain mungkin saja, karena klien mana pun dapat menyetel mode SQL untuk sesinya.
Anda dapat mengambil nilai global atau sesi sql_mode saat ini dengan pernyataan berikut:
SELECT @@GLOBAL.sql_mode;
SELECT @@SESSION.sql_mode;
Defaultnya harus berupa string kosong (tidak ada mode yang disetel). Anda dapat mengatur mode SQL di my.cnf
file, dengan --sql-mode
opsi untuk mysqld, atau menggunakan SET
pernyataan.
Pembaruan:MySQL 5.7 dan yang lebih baru menetapkan mode ketat secara default. Lihat https://dev.mysql.com/doc/ refman/5.7/en/sql-mode.html