web-dev-qa-db-fra.com

Code d'erreur: 1406. Données trop longues pour la colonne - MySQL

Code d'erreur: 1406. Données trop longues pour la colonne. 

CREATE  TABLE `TEST` 
(

  `idTEST` INT NOT NULL ,

  `TESTcol` VARCHAR(45) NULL ,

  PRIMARY KEY (`idTEST`) 
);

Maintenant Insert quelques valeurs

INSERT INTO TEST
VALUES
(
    1,
    'Vikas'
)

select 

SELECT * FROM TEST;

Insérer un enregistrement plus que la length

INSERT INTO TEST
VALUES
(
    2,
    'Vikas Kumar Gupta Kratika Shukla Kritika Shukla'
)

Si nous select le length 

SELECT LENGTH('Vikas Kumar Gupta Kratika Shukla Kritika Shukla')

 '47'

Et il montre le message d'erreur 

Code d'erreur: 1406. Données trop longues pour la colonne  

Mais quelle est mon attente, je veux insérer au moins 45 premiers caractères dans le tableau

s'il vous plaît laissez-moi savoir si la question n'est pas claire.

Je connais la cause de cette erreur. J'essaie d'insérer des valeurs plus que la longueur du type de données.

Je veux une solution dans MySQL car c'est possible dans MS SQL. J'espère donc que ce sera aussi dans MySQL .

14
vikas

MySQL tronquera toute valeur d'insertion qui dépasse la largeur de colonne spécifiée.

pour que cela fonctionne sans erreur, essayez de changer votre SQL mode afin de ne pas utiliser STRICT.

Manuel de référence Mysql


MODIFIER:

Pour changer de mode 

Ceci peut être fait de deux façons:

  1. Ouvrez votre fichier my.ini (Windows) ou my.cnf (Unix) dans le répertoire d'installation de MySQL et recherchez le texte "sql-mode".

Trouver:

Code:

# Set the SQL mode to strict 
sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"

Remplacer par:

Code:

# Set the SQL mode to strict 
sql-mode="NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"

Ou

  1. Vous pouvez exécuter une requête SQL dans votre outil de gestion de base de données, telle que phpMyAdmin:

Code:

SET @@global.sql_mode= '';
55
echo_Me

Je pense que désactiver le mode STRICT n'est pas une bonne option car l'application peut commencer à perdre les données saisies par les utilisateurs.

Si vous recevez des valeurs pour le TESTcol d'une application, vous pouvez ajouter une validation de modèle, comme dans Rails.

validates :TESTcol, length: { maximum: 45 }

Si vous manipulez des valeurs dans un script SQL, vous pouvez tronquer la chaîne avec la commande SOUS-CHAÎNE

INSERT INTO TEST
VALUES
(
    1,
    SUBSTRING('Vikas Kumar Gupta Kratika Shukla Kritika Shukla', 0, 45)
);
1
Hirurg103