Mysql
 sql >> Database >  >> RDS >> Mysql

Aggancia automaticamente le corde alla lunghezza corretta sull'inserto

In realtà, MySQL tronca le stringhe alla larghezza della colonna per impostazione predefinita. Genera un avviso, ma consente l'inserimento.

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 | 
+------------+

Se imposti la modalità SQL rigorosa, trasforma l'avviso in un errore e rifiuta l'inserimento.

In merito al tuo commento:la modalità SQL è una configurazione di MySQL Server. Probabilmente non è PDO a causarlo, ma d'altra parte è possibile, perché qualsiasi client può impostare la modalità SQL per la sua sessione.

Puoi recuperare il valore sql_mode globale o di sessione corrente con le seguenti istruzioni:

SELECT @@GLOBAL.sql_mode;
SELECT @@SESSION.sql_mode;

Il valore predefinito dovrebbe essere una stringa vuota (nessuna modalità impostata). Puoi impostare la modalità SQL nel tuo my.cnf file, con il --sql-mode opzione per mysqld o utilizzando un SET dichiarazione.

Aggiornamento:MySQL 5.7 e versioni successive impostano la modalità rigorosa per impostazione predefinita. Vedi https://dev.mysql.com/doc/ refman/5.7/en/sql-mode.html