web-dev-qa-db-fra.com

MySQL trop long varchar truncation / error setting

J'ai deux instances MySQL. La première tronque les chaînes lors de l'insertion lorsque les données sont trop longues. Le 2ème soulève une erreur:

ERROR 1406 (22001): Data too long for column 'xxx' at row 1

Je veux que le 2ème tronque également les données. Existe-t-il un paramètre MySQL pour gérer ce comportement?

32
Maksym Polshcha

Vous pouvez désactiver STRICT_TRANS_TABLES et STRICT_ALL_TABLES. Cela permet la troncature automatique de la chaîne insérée.

Citation de MySQL Documantation.

Le mode strict contrôle la façon dont MySQL gère les valeurs non valides ou manquantes dans les instructions de changement de données telles que INSERT ou UPDATE. Une valeur peut être invalide pour plusieurs raisons. Par exemple, il peut avoir le mauvais type de données pour la colonne ou être hors de portée. Une valeur est manquante lorsqu'une nouvelle ligne à insérer ne contient pas de valeur pour une colonne non NULL qui n'a pas de clause DEFAULT explicite dans sa définition. (Pour une colonne NULL, NULL est inséré si la valeur est manquante.)

Référence: MySQL Server SQL Modes

42
bansi

Si le mode SQL strict n'est pas activé et que vous affectez une valeur à une colonne CHAR ou VARCHAR qui dépasse la longueur maximale de la colonne, la valeur est tronquée pour s'adapter et un avertissement est généré. Pour la troncature des caractères non spatiaux, vous pouvez provoquer une erreur (plutôt qu'un avertissement) et supprimer l'insertion de la valeur en utilisant le mode SQL strict. Voir Section 6.1.7, "Modes SQL du serveur".

Comment vous pouvez le changer: http://dev.mysql.com/doc/refman/5.7/en/sql-mode.html


Trouvé deux façons de désactiver le mode strict:

  1. ajouter ci-dessous à my.cnf

    sql-mode = "NO_AUTO_CREATE_USER, NO_ENGINE_SUBSTITUTION"

  2. utilise la console mysql.

    SET @@ global.sql_mode = '';

Veuillez les tester avant de les exécuter sur l'environnement de production.

10

si vous utilisez cpanel,

remplacer

sql-mode="NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"

dans /usr/my.cnf

à

sql-mode=""

courir

/etc/init.d/mysql restart
1
Mikel Tawfik