IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MySQL Discussion :

MysqlDataTruncation: "Data truncation: Data too long for column 'nom' at row 1"


Sujet :

MySQL

  1. #1
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Guinée

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2015
    Messages : 11
    Par défaut MysqlDataTruncation: "Data truncation: Data too long for column 'nom' at row 1"
    Salut,
    Je travail avec java mysql
    Table essaie colonne nom et prénom
    Et quand je tante d'ajouter des donne on me dit que les donne que j'ai ajouter son trop long pour la colonne nom.
    J'ai modifier type de ma colonne a varchar(100) mais on m'affiche la même erreur
    Voici l'erreur

    MysqlDataTruncation: "Data truncation: Data too long for column 'nom' at row 1"

  2. #2
    Membre prolifique Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 780
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    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 : 6 780
    Par défaut
    Salut Nadhai.

    Quand tu déclares "varchar(100)" cela signifie que tu as 100 octets pour stocker tes caractères.
    Oui mais voilà, quand tu es sous "latin1", par exemple, ce jeu de caractères fait en sorte que tes caractères occupent un octet et jamais plus.
    Mais comme je le crois, tu utilises de l'UTF8, il faut savoir que ce jeu de caractères peut selon les caractères occuper 1, 2 ou 3 octets.
    Donc si tu désires stocker un ligne qui selon tout apparence fait moins de 100 "caractères" lisibles, il se peut que'en réalité, cela en fasse plus de 100.
    D'où ton messager d'anomalie qui tronque l’excédent en trop.

    Deux solutions possibles :

    1) tu ne gères plus ton jeu de caractères avec de l'UTF8 mais avec du Latin1.

    2) tu n'utilises plus un varchar mais un text.

    @+

  3. #3
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 990
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 990
    Billets dans le blog
    6
    Par défaut
    Citation Envoyé par Artemus24 Voir le message
    Salut Nadhai.

    Quand tu déclares "varchar(100)" cela signifie que tu as 100 octets pour stocker tes caractères.
    Oui mais voilà, quand tu es sous "latin1", par exemple, ce jeu de caractères fait en sorte que tes caractères occupent un octet et jamais plus.
    Mais comme je le crois, tu utilises de l'UTF8, il faut savoir que ce jeu de caractères peut selon les caractères occuper 1, 2 ou 3 octets.
    Non ! Dans MySQmerde il utilise systématiquement 3 octets pour l'UTF 8 dans les index quelque soit les caractères stockés ce qui entre nous est la pire des choses !
    https://www.adayinthelifeof.nl/2010/...elds-in-mysql/

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  4. #4
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 553
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 553
    Billets dans le blog
    10
    Par défaut
    Ce n'est pas ce que je comprends en lisant l'article en référence dont voici un extrait :
    You just have to realize that MySQL only uses a maximum of 3 bytes for UTF-8, which means not ALL utf-8 characters can be stored in MySQL, but most of the UTF-8 characters possible aren’t used anyway.. That’s why it might get confusing when reading upon UTF-8 that uses 4 bytes, and the 3 bytes that MySQL uses
    Ce qui est corroboré par la doc MySQL : http://dev.mysql.com/doc/refman/5.7/...uirements.html
    The effective maximum number of bytes that can be stored in a VARCHAR or VARBINARY column is subject to the maximum row size of 65,535 bytes, which is shared among all columns. For a VARCHAR column that stores multibyte characters, the effective maximum number of characters is less. For example, utf8 characters can require up to three bytes per character, so a VARCHAR column that uses the utf8 character set can be declared to be a maximum of 21,844 characters. See Section C.10.4, “Limits on Table Column Count and Row Size”.
    Par contre, il apparait bien que l'encodage UTF8 n'est pas géré de façon correcte par MySQL puisque certains caractères requièrent 4 bytes et MySQL n'en utilise au maximum que 3

  5. #5
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Guinée

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2015
    Messages : 11
    Par défaut
    J'ai changé et j'ai mît le 'latin1_swedish_ci ' car j'ai pas trouve le latin1 simple .
    sa m'affiche les même erreur ,
    Et problème est que sa n'affiche pas d message d'erreur

    Aide moi s'il vous plait !!!

  6. #6
    Membre prolifique Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 780
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    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 : 6 780
    Par défaut
    Salut à tous :

    @ Nadhai : si tu ne fais que du français et éventuellement due l'anglais, le latin1 est largement suffisant.
    Voici comment déclarer ta table MySql (enfin c'est juste un exemple) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    CREATE TABLE `test`
    (
      `id`       integer unsigned NOT NULL AUTO_INCREMENT,
    ...
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB
      DEFAULT CHARSET=`latin1` COLLATE=`latin1_general_ci`
      ROW_FORMAT=COMPRESSED;
    Pourrais-tu nous donner un exemple de ce qui provoque ton erreur, svp ?
    Ainsi que le descriptif exacte de ta table.
    S'agit-il d'un chargement à partir d'un fichier excel ou autre chose ?

    @ Escartefigue : je comprends exactement la même chose que toi, à savoir que les caractères utilisés sous UTF8 peuvent occupés 1, 2 ou 3 octets, c'est-à-dire au maximum 3 octets.

    Il y a même pire, le nouveau jeu de caractères UTF8MB4 utilise jusqu'à 4 octets.

    Voici ce que j'obtiens chez moi :
    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
    --------------
    select character_set_name   AS 'Charset',
           description          AS 'Description',
           default_collate_name AS 'Default collation',
           maxlen               AS 'Maxlen'
    from    information_schema.character_sets
    where   character_set_name LIKE '%latin%'
    OR      character_set_name LIKE '%utf8%'
    order by character_set_name
    --------------
     
    +---------+-----------------------------+--------------------+--------+
    | Charset | Description                 | Default collation  | Maxlen |
    +---------+-----------------------------+--------------------+--------+
    | latin1  | cp1252 West European        | latin1_swedish_ci  |      1 |
    | latin2  | ISO 8859-2 Central European | latin2_general_ci  |      1 |
    | latin5  | ISO 8859-9 Turkish          | latin5_turkish_ci  |      1 |
    | latin7  | ISO 8859-13 Baltic          | latin7_general_ci  |      1 |
    | utf8    | UTF-8 Unicode               | utf8_general_ci    |      3 |
    | utf8mb4 | UTF-8 Unicode               | utf8mb4_general_ci |      4 |
    +---------+-----------------------------+--------------------+--------+
    Dans la quatrième colonne, on lit le le nombre d'octet au maximum que le jeu de caractères peut occupé en mémoire.

    @+

  7. #7
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 553
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 553
    Billets dans le blog
    10
    Par défaut
    Citation Envoyé par Artemus24 Voir le message
    Il y a même pire, le nouveau jeu de caractères UTF8MB4 utilise jusqu'à 4 octets.
    C'est au contraire une bonne nouvelle, puisque certains caractères exotiques requièrent 4 bytes, il s'agit d'une sorte de correctif en somme.

  8. #8
    Membre prolifique Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 780
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    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 : 6 780
    Par défaut
    Salut Escartefigue.

    Alors là, tu me poses une colle.
    Je ne sais pas répondre à ce genre de question.

    @+

  9. #9
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Guinée

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2015
    Messages : 11
    Par défaut
    Salut arterus24
    Merci pour ton aide sa marché

Discussions similaires

  1. Data too long for column 'title' at row 1
    Par Jolt0x dans le forum Débuter
    Réponses: 2
    Dernier message: 16/06/2014, 20h36
  2. Data truncation: Data too long for column
    Par enzostar dans le forum JDBC
    Réponses: 1
    Dernier message: 19/01/2011, 14h45
  3. [NWNX ODBC2 plugin] Data too long for column ..
    Par ballestolive dans le forum Débuter
    Réponses: 1
    Dernier message: 31/10/2006, 15h01
  4. ERROR 1406 (22001): Data too long for column
    Par olive_le_malin dans le forum Requêtes
    Réponses: 6
    Dernier message: 12/06/2006, 14h27
  5. "Data truncation: Data too long for column"
    Par bibiloute dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 04/05/2006, 09h08

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