Mysql
 sql >> Base de données >  >> RDS >> Mysql

Coupe automatiquement les cordes à la bonne longueur lors de l'insertion

En fait, MySQL tronque les chaînes à la largeur de la colonne par défaut. Il génère un avertissement, mais autorise l'insertion.

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

Si vous définissez le mode SQL strict, il transforme l'avertissement en erreur et rejette l'insertion.

Re votre commentaire :le mode SQL est une configuration de serveur MySQL. Ce n'est probablement pas PDO qui en est la cause, mais d'un autre côté c'est possible, car n'importe quel client peut définir le mode SQL pour sa session.

Vous pouvez récupérer la valeur sql_mode globale ou de session actuelle avec les instructions suivantes :

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

La valeur par défaut doit être une chaîne vide (aucun mode défini). Vous pouvez définir le mode SQL dans votre my.cnf fichier, avec le --sql-mode option pour mysqld, ou en utilisant un SET déclaration.

Mise à jour :MySQL 5.7 et versions ultérieures définissent le mode strict par défaut. Voir https://dev.mysql.com/doc/ refman/5.7/en/sql-mode.html