Discussion: Data truncated for column 'xx' at row 1 [MySQL-5.7]

  1. #1
    Membre à l'essai Avatar de PoelQ
    Homme Profil pro
    Étudiant Exia.Cesi
    Inscrit en
    janvier 2015
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 20
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant Exia.Cesi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : janvier 2015
    Messages : 22
    Points : 23
    Points
    23

    Par défaut Data truncated for column 'xx' at row 1

    Bonjour,

    Je suis bloqué depuis plusieurs heures sur une simple erreur lors de l'import d'un fichier dans MySQL.
    Je comprend bien l'erreur, qui m'indique que la taille définie dans mes colonnes est trop petite par rapport à la taille de la donnée que je souhaite importer. Le problème est que je peux insérer exactement la même donnée en passant par une requête Insert et donc je ne comprend pas ce que l'erreur m'indique.
    Quelqu'un aurait la solution à cette erreur ?

    Voici ma configuration : MySQL 5.7.17 sous Ubuntu 16.04.2

    Voici la requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    LOAD DATA INFILE '/var/lib/mysql-files/data.txt' INTO TABLE wiki.poidsv2;
    Voici les premières lignes du fichier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    15	1696582	1
    149	1696582	1
    430	1696582	1
    511	1696582	1
    628	1696582	1
    1004	1696582	1
    1128	1696582	1
    1135	1696582	1
    1284	1696582	1
    1337	1696582	1
    Voici la structure de la table :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    +--------+---------------------+------+-----+---------+-------+
    | Field  | Type                | Null | Key | Default | Extra |
    +--------+---------------------+------+-----+---------+-------+
    | enfant | int(10) unsigned    | NO   |     | NULL    |       |
    | parent | int(10) unsigned    | NO   |     | NULL    |       |
    | valeur | tinyint(1) unsigned | NO   |     | NULL    |       |
    +--------+---------------------+------+-----+---------+-------+
    Voici l'erreur lors de l'exécution :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    mysql> LOAD DATA INFILE '/var/lib/mysql-files/data.txt' INTO TABLE wiki.poidsv2;
    ERROR 1265 (01000): Data truncated for column 'enfant' at row 1

  2. #2
    Expert éminent Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    février 2011
    Messages
    2 981
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 77
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : février 2011
    Messages : 2 981
    Points : 9 084
    Points
    9 084

    Par défaut

    Salut PoelQ.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    --------------
    SET AUTOCOMMIT = 0
    --------------
     
    --------------
    START TRANSACTION
    --------------
     
    --------------
    DROP DATABASE IF EXISTS `base`
    --------------
     
    --------------
    CREATE DATABASE `base`
            DEFAULT CHARACTER SET `latin1`
            DEFAULT COLLATE       `latin1_general_ci`
    --------------
     
    --------------
    DROP TABLE IF EXISTS `test`
    --------------
     
    --------------
    CREATE TABLE `test`
    ( `id`          integer unsigned  not null auto_increment primary key,
      `enfant`      integer unsigned  not null,
      `parent`      integer unsigned  not null,
      `valeur`      tinyint unsigned  not null
    ) ENGINE=InnoDB
      DEFAULT CHARSET=`latin1` COLLATE=`latin1_general_ci`
      ROW_FORMAT=COMPRESSED
    --------------
     
    --------------
    LOAD DATA LOCAL INFILE 'fichier.txt'
         INTO TABLE `test`
         CHARACTER SET latin1
         FIELDS TERMINATED            BY '\t'
                OPTIONALLY ENCLOSED   BY '\"'
                ESCAPED               BY '\\'
         LINES  TERMINATED            BY '\r\n'
         IGNORE 0 LINES
         (enfant, parent, valeur)
    --------------
     
    --------------
    select * from `test`
    --------------
     
    +----+--------+---------+--------+
    | id | enfant | parent  | valeur |
    +----+--------+---------+--------+
    |  1 |     15 | 1696582 |      1 |
    |  2 |    149 | 1696582 |      1 |
    |  3 |    430 | 1696582 |      1 |
    |  4 |    511 | 1696582 |      1 |
    |  5 |    628 | 1696582 |      1 |
    |  6 |   1004 | 1696582 |      1 |
    |  7 |   1128 | 1696582 |      1 |
    |  8 |   1135 | 1696582 |      1 |
    |  9 |   1284 | 1696582 |      1 |
    | 10 |   1337 | 1696582 |      1 |
    +----+--------+---------+--------+
    --------------
    COMMIT
    --------------
     
    --------------
    SET AUTOCOMMIT = 1
    --------------
     
    Appuyez sur une touche pour continuer...
    1) vous êtes sous linux, de ce fait, la fin de ligne est de la forme "\r".
    Tandis que dans mon exemple, je suis sous windows, et de ce fait ma fin de ligne est "\r\n".

    Le "load" ne peut pas le deviner si vous ne le précisez pas.

    2) en récupérant vous exemple, je me suis aperçu que le séparateur de champs est la tabulation.
    De même, vous devez aussi le préciser en mettant "\t".

    3) vous devez aussi préciser les noms des colonnes, en faisant en sorte de les mettre dans l'ordre de votre fichier excel, comme je l'ai fait.

    4) je travaille en latin1. A vous de préciser si c'est utf8 ou autre chose. Je pense que sous linux, c'est du utf8.

    5) et quand on ne sait pas répondre à une question, vous devez avoir le réflexe de consulter la documentation mysql :
    --> https://dev.mysql.com/doc/refman/5.7/en/load-data.html

    @+
    Si vous êtes de mon aide, vous pouvez cliquer sur .
    Mon site : http://www.jcz.fr

  3. #3
    Membre à l'essai Avatar de PoelQ
    Homme Profil pro
    Étudiant Exia.Cesi
    Inscrit en
    janvier 2015
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 20
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant Exia.Cesi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : janvier 2015
    Messages : 22
    Points : 23
    Points
    23

    Par défaut

    Bonjour Artemus,

    Il m'est toujours impossible d'insérer des données, j'ai essayé de créer une base de données en utilisant votre exemple mais j'ai toujours la même erreur, j'ai essayé de préciser chacune des options que vous m'avez indiqué mais cela ne change rien non plus, j'ai essayé d'importer le fichier en passant par phpMyAdmin par l'outil intégré mais aussi par une requête en précisant "LOCAL" dans la requête. Je suppose maintenant que quand je crée mon fichier il y a un problème dans le formatage. Je vous l'ai mis en pièce jointe si vous souhaitez y jeter un coup d’œil.
    Fichiers attachés Fichiers attachés

  4. #4
    Expert éminent Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    février 2011
    Messages
    2 981
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 77
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : février 2011
    Messages : 2 981
    Points : 9 084
    Points
    9 084

    Par défaut

    Salut PoelQ.

    J'ai refais le test avec votre nouveau fichier et je n'ai aucun problème pour charger ma table de travail.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ERROR 1265 (01000): Data truncated for column 'enfant' at row 1
    Ce message signifie que vous essayez de mettre dans la colonne "enfant" quelque chose qui est plus grand que le type utilisé.

    A priori, la plus grande valeur de la première colonne du fichier excel est "10.729.766".
    Je rappelle que le type "int" admet de -2.147.483.648 à 2.147.483.647.
    Dans mon exemple, j'ai précisé "integer unsigned", l'amplitude est de 0 jusqu'à 4.294.967.295
    Donc aucun problème pour le chargement de cette valeur dans le fichier excel.

    Surtout que le message précise "row 1", donc il s'agit plutôt de la façon dont le "load" va interpréter le fichier que vous avez en ligne.
    Le séparateur de vos champs est le caractère de tabulation "\t".
    La fin de ligne sous linux est "\r". Il se peut que je me trompe et qu'il faut mettre plutôt "\n".

    Comme je ne travaille pas sous linux, je ne peux répondre avec précision sur le format de vos données et sur ce qu'il faut exactement déclaré pour le "load".
    Etes-vous certain que votre fichier excel est conforme à ce que vous désirez faire ?
    --> le bon charset
    --> la fin de ligne est bien du type "\n" si vous êtes sous linux.
    --> pas de lignes en début du fichier à ne pas charger

    A vous de faire les tests pour trouver le bon paramétrage.

    Voici une piste de recherches en tapant sous google votre message d'erreur :
    --> http://stackoverflow.com/questions/1...-from-txt-file

    @+
    Si vous êtes de mon aide, vous pouvez cliquer sur .
    Mon site : http://www.jcz.fr

  5. #5
    Membre à l'essai Avatar de PoelQ
    Homme Profil pro
    Étudiant Exia.Cesi
    Inscrit en
    janvier 2015
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 20
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant Exia.Cesi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : janvier 2015
    Messages : 22
    Points : 23
    Points
    23

    Par défaut

    Bonjour Artemus,

    Le problème est résolu, c'était un soucis d'encodage du fichier, tout simplement.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySQL]error 1265 (01000) data truncated for column
    Par fayabobo dans le forum Requêtes
    Réponses: 2
    Dernier message: 09/05/2011, 16h43
  2. Champ ENUM Data truncated for column
    Par dfghjk1234 dans le forum MySQL
    Réponses: 0
    Dernier message: 22/02/2011, 15h37
  3. Warning 1265: Data truncated for column
    Par el_kiko dans le forum MySQL
    Réponses: 2
    Dernier message: 01/03/2010, 21h17
  4. Data truncated for column 'idadresse' at row 1
    Par maxkarting25 dans le forum JDBC
    Réponses: 5
    Dernier message: 20/04/2009, 15h06
  5. Erreur : Data truncated for column
    Par mercure07 dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 10/12/2008, 11h20

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo