2010-01-06 18 views
1

Je charge un fichier CSV dans MySQL (5.1) en utilisant CREATE TABLE et LOAD DATA. J'ai un certain nombre de colonnes qui sont des types textuels (catégories) mais contiennent des valeurs numériques. Lorsque je crée la table, j'affecte ces colonnes comme VARCHAR(254) mais le pilote JDBC génère une SQLException "Données tronquées pour la colonne AgeGroup à la ligne 1".Comment puis-je obtenir SQL LOAD DATA de CSV pour honorer le type de colonne lors du chargement?

Mes données ressemble à ceci:

ID,AgeGroup 
xxx,4 
xxy,3 
xyx,6 
... 

Mon instruction create table ressemble à ceci

CREATE TABLE abc(ID VARCHAR(254), AgeGroup VARCHAR(254)) 

Ma déclaration de charge ressemble à ceci

LOAD DATA INFILE \myfile.csv\ INTO TABLE abc FIELDS TERMINATED BY ',' 

Je suppose qu'il est un problème de conversion de type car AgeGroup est une colonne de base de données textuelle mais je colle ce qui semble être des nombres il. Comment puis-je - forcer la commande LOAD DATA pour honorer le type de données de la colonne et convertir le contenu du fichier? J'utilise le pilote JDBC officiel de MySQL.

Répondre

1

Je suis surpris que cela ne fonctionne pas. Je veux dire, je m'attendrais à ce comportement quand on colle des valeurs de chaîne dans des colonnes numériques - pas l'inverse.

Quoi qu'il en soit, vous pouvez utiliser une extension de la syntaxe LOAD DATA introduite dans v5.0 pour calculer des expressions arbitraires de vos données brutes:

LOAD DATA INFILE \myfile.csv\ 
INTO TABLE abc 
FIELDS TERMINATED BY ',' 
(@ID, @AgeGroup) 
SET ID = @ID 
, AgeGroup = CAST(@AgeGroup AS UNSIGNED) 

(voir: http://dev.mysql.com/doc/refman/5.1/en/load-data.html