My Sql Bulk insère le chargement des données en tronquant

bulkinsert mysql sqlbulkcopy truncation

Question

J'essaie de charger les données d'un fichier CSV dans la base de données MYSql via une option d'insertion en bloc. Voici la syntaxe de création de table et le fichier CSV ci-dessous

CREATE TABLE discounts (
    id INT NOT NULL ,
    title VARCHAR(10) NOT NULL,
    expired_date DATE NOT NULL,
    amount VARCHAR(255 ) NOT NULL

);

Format de fichier CSV:

"475","Back","20140401","FFFF"
"476","bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb","20140901","DDD"

Requête SQL:

LOAD DATA  INFILE 'C:\Users\karthick\Desktop\data.csv' 
INTO TABLE discounts 
FIELDS TERMINATED BY ',' 
ENCLOSED BY '"'
LINES TERMINATED BY '\r\n';

Dans la syntaxe de création de table ci-dessus, j'ai spécifié la longueur de la colonne "title" à "10". Mais la valeur dans le fichier de données pour la deuxième ligne dépasse la longueur 10.

Lorsque j'ai exécuté la requête SQL, les données ont été chargées avec succès dans la base de données MySQL. Voici la sortie ci-dessous. Mes valeurs de la deuxième ligne sont tronquées pour le champ "title". Pourriez-vous s'il vous plaît suggérer comment arrêter de charger la ligne sans la tronquer? De plus, il devrait charger la ligne suivante sans terminer si les données sont appropriées. Veuillez suggérer

Sortie de la base de données:

'475', 'Back', '2014-04-01', 'FFFF'
'476', 'bbbbbbbbbb', '2014-09-01', 'DDD'

Réponse populaire

Selon ma compréhension, voici quelques points que vous souhaitez atteindre:
1) Les données ne doivent pas être tronquées si la longueur du titre est supérieure à la longueur du champ spécifiée, conformément à la structure de la table.
2) Si la longueur du titre est supérieure, l'enregistrement doit être ignoré lors de l'importation des enregistrements et le reste du processus doit continuer.

Réponse selon la base de données mysql prise en compte:

Vous pouvez utiliser sql_mode en tant que TRADITIONAL (Assurez-vous que MySQL se comporte comme un système de base de données SQL "classique". Une description simple de ce mode est "donnez une erreur plutôt qu'un avertissement" lors de l'insertion d'une valeur incorrecte dans une colonne. https://dev.mysql.com/doc/refman/8.0/en/sql-mode.html )

Maintenant, après avoir défini ce mode, lors de l'importation des enregistrements, une erreur se produira si des données incorrectes ou des valeurs hors limites parviennent à être insérées dans la table.

La partie suivante, pour les valeurs hors limites, n’est pas un moyen de sauter les lignes d’erreur. Vous pouvez vérifier le lien de discussion existant: Ignorer les lignes d'erreur lors du chargement des données dans la table mysql à partir d'un fichier délimité

Pour ignorer des lignes qui rompent des contraintes uniques ou éventuellement créer des enregistrements en double, vous pouvez ignorer l'utilisation du mot clé IGNORE avec LOAD DATA INFILE.

Voir: https://dev.mysql.com/doc/refman/5.5/en/load-data.html



Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi