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

Requêtes MySQL Discussion :

Champs texte de fin et caractere fantome.


Sujet :

Requêtes MySQL

  1. #1
    Inactif  

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    3 064
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2011
    Messages : 3 064
    Points : 4 605
    Points
    4 605
    Par défaut Champs texte de fin et caractere fantome.
    Bonjour,

    Réguliérement quand je crée un table sur une table phpmyadmin , j'insere mes données avec " load data into table " depuis un fichier .

    Un problème ce pose dans un cas précis :

    - si j'ai un champ texte dans ma dernière colonne
    - la configuration de la table est en latin_swedish_16

    Un caractère invisible vient se greffer sur la chaine . Exemple "TOTO" = 4 caractères , en faisant une lenght(machaine) = 5 caractères. Un caractère fantome s'ajoute

    Le même problème se produit mais aléatoirement quand la table est en utf8_ (celui par défaut).

    Par moment je suis obligé de faire un update en remettant la colonne à jour en selectionnant -1 caractère. Il y a un gros risque si une cellule n'est pas impactée je tronque donc la chaine d'origine !

    Merci de m'aiguiller

  2. #2
    Expert éminent sénior Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 381
    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 381
    Points : 19 064
    Points
    19 064
    Par défaut
    Salut tanaka59.

    Citation Envoyé par tanaka59
    la configuration de la table est en latin_swedish_16
    Cette collation n'existe pas sous mysql. Es-tu certain de cette information ?
    Voici ce que j'ai 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
    22
    23
    24
    25
    26
    27
    --------------
    show collation like 'latin%'
    --------------
     
    +---------------------+---------+----+---------+----------+---------+
    | Collation           | Charset | Id | Default | Compiled | Sortlen |
    +---------------------+---------+----+---------+----------+---------+
    | latin1_german1_ci   | latin1  |  5 |         | Yes      |       1 |
    | latin1_swedish_ci   | latin1  |  8 | Yes     | Yes      |       1 |
    | latin1_danish_ci    | latin1  | 15 |         | Yes      |       1 |
    | latin1_german2_ci   | latin1  | 31 |         | Yes      |       2 |
    | latin1_bin          | latin1  | 47 |         | Yes      |       1 |
    | latin1_general_ci   | latin1  | 48 |         | Yes      |       1 |
    | latin1_general_cs   | latin1  | 49 |         | Yes      |       1 |
    | latin1_spanish_ci   | latin1  | 94 |         | Yes      |       1 |
    | latin2_czech_cs     | latin2  |  2 |         | Yes      |       4 |
    | latin2_general_ci   | latin2  |  9 | Yes     | Yes      |       1 |
    | latin2_hungarian_ci | latin2  | 21 |         | Yes      |       1 |
    | latin2_croatian_ci  | latin2  | 27 |         | Yes      |       1 |
    | latin2_bin          | latin2  | 77 |         | Yes      |       1 |
    | latin5_turkish_ci   | latin5  | 30 | Yes     | Yes      |       1 |
    | latin5_bin          | latin5  | 78 |         | Yes      |       1 |
    | latin7_estonian_cs  | latin7  | 20 |         | Yes      |       1 |
    | latin7_general_ci   | latin7  | 41 | Yes     | Yes      |       1 |
    | latin7_general_cs   | latin7  | 42 |         | Yes      |       1 |
    | latin7_bin          | latin7  | 79 |         | Yes      |       1 |
    +---------------------+---------+----+---------+----------+---------+
    Je suppose que tu voulais parler de 'latin1_swedish_ci'.
    Comme tu le constates dans le tableau ci-dessus, la colonne 'sortlen' indique la longueur en octet de ton caractère à tier.
    'latin1_swedish_ci' est de longueur 1, donc 1 caractère = 1 octet.

    Si tu veux gérer un peu mieux des chaines de caractères, alors tu dois déclarer, par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    CREATE DATABASE `base`
    	DEFAULT CHARACTER SET `latin1`
    	DEFAULT COLLATE       `latin1_general_ci`;
    En procédant ainsi, toutes les chaînes de caractères de toutes tes tables seront en collation 'latin1_general_ci'.

    Tu peux aussi préciser cela dans ta table :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    CREATE TABLE `test`
    (
      ...,
      `name`     char(20)         NOT NULL,
      ...
    ) ENGINE=InnoDB
      DEFAULT CHARSET=`latin1` COLLATE=`latin1_general_ci`
      ROW_FORMAT=COMPRESSED;
    Maintenant ta question concerne le chargement de ta table à partir d'un fichier extérieur.
    Voici un exemple de chargement à partir d'un fichier de type 'csv' :
    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
    -- ===============================
    -- Chargement de la table `cities`
    -- ===============================
     
    LOAD DATA LOCAL INFILE 'Fichier.txt'
    	INTO TABLE `Cities`
        CHARACTER SET latin1
    	FIELDS	TERMINATED BY ','
    			ENCLOSED   BY '"'
    			ESCAPED    BY '\\'
    	LINES	TERMINATED BY '\n'
        IGNORE 0 LINES
        (@F1, @F2, @F3, @F4, Population, Latitude, Longitude, @F8)
    	set Country    = trim(@F1),
    	    City       = trim(@F2), 
    	    AccentCity = trim(@F3),
    	    Region     = trim(@F4),
    		Date       = outils.chgdate(@F8);
    J'ai bien précisé que mon jeu de caractères est bien du 'latin1'.

    Il se peut aussi que ton problème ne soit pas dans la déclarative des bases ou des tables, voire encore dans le chargement, mais tout simplement dans le jeu de caractère qui est stocké dans ton fichier.
    Es-tu certain que tu travailles bien avec du 'latin1' ?

    Si tu travailles comme presque tout le monde avec du 'utf8', il faut mettre alors comme collation 'utf8_general_ci'.
    Mais assure-toi que le stockage de ton fichier est bien en 'utf8 sans bom'.

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

  3. #3
    Inactif  

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    3 064
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2011
    Messages : 3 064
    Points : 4 605
    Points
    4 605
    Par défaut
    Bonjour,

    "Cette collation n'existe pas sous mysql. Es-tu certain de cette information ?"
    C'est le bien le latin1_swedish_ci , erreur de saisie de ma part

    Es-tu certain que tu travailles bien avec du 'latin1' ?
    Houla tu fais bien d'en parler car je galère un peu avec mes éditeurs de texte :

    - je travaille avec excel par moment quand je dois faire du "placement dans une case " , généralement c'est quand je construis un tableau de toute pièce destiné à la base phpmyadmin/mysql.
    - je travaille beaucoup aussi un avec un éditeur de texte "pspad" , il à l'avantage de pouvoir compter les caractères colonnes (souvent je dois faire du contrôle de longueur de chaine alors je m'en sers ) , le plus ergonomique à utiliser et surtout fonctionnel à mon gout !
    - je travaille aussi avec notepad+ plus occationnelement.

    Un conflit entre 2 éditeurs de texte peut être la source du problème ? Ils sont dans 99,9% des cas en utf8 pour psapd et en Ansi pour notepad++ . A ce sujet je ne sais jamais changer l'encodage par défaut même lors de l'ouverture du fichier. notepad++ met par défaut Ansi et pspad utf8 (il y en a même je pense ?)

    Mais assure-toi que le stockage de ton fichier est bien en 'utf8 sans bom'.
    Ou puis je régler ceci par défaut à l'ouverture d'un fichier ?

  4. #4
    Expert éminent sénior Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 381
    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 381
    Points : 19 064
    Points
    19 064
    Par défaut
    Salut tanaka59.

    Citation Envoyé par Tanaka59
    Un conflit entre 2 éditeurs de texte peut être la source du problème ?
    A priori, ton problème provient d'un mauvais paramétrage de ton éditeur de texte.

    Citation Envoyé par Tanaka59
    Ils sont dans 99,9% des cas en utf8 pour psapd et en Ansi pour notepad++
    Donc avant de faire quoi que ce soit, tu dois te poser la question du jeu de caractères que tu désires utiliser.

    En France, tu as le choix entre faire du français ou de l'anglais (mettre le 'latin1'), ou bien de l'international (mettre le 'utf8').

    Voici les deux jeux de caractères à déclarer sur tes bases et tes tables :
    --> charset : utf8.
    --> collation : utf8_unicode_ci ou bien utf8_general_ci.
    ou bien :
    --> charset : latin1
    --> collation : latin_general_ci

    Citation Envoyé par Tanaka59
    A ce sujet je ne sais jamais changer l'encodage par défaut même lors de l'ouverture du fichier.
    Je ne connais pas ton autre éditeur de texte, mais j'utilise très fréquemment notepad++, donc je peux t'aider.
    Notepad++ est gratuit et c'est l'éditeur le plus utilisé sous windows.

    Ouvrir notepad++ sur un fichier quelconque en text (tu crées toto.txt à vide) par exemple.

    Se rendre dans l'onglet "paramétrage". Tu cliques sur "nouveau document".
    --> Format des sauts de ligne : tu coches "windows".
    --> encodage : tu coches "utf8 sans bom", si tu utilises utf8.
    --> langage par défaut : 'normal text'.

    Sur un fichier déjà existant, tu peux le convertir dans l'encodage que tu désires.

    Se rendre dans l'onglet 'encodage'. Tu as deux parties. Celle du haut, c'est le codage utilisé, celle du bas c'est la conversion.
    Si tu as fait correctement le paramétrage, sur un nouveau fichier, tu auras l'encodage que tu auras choisi, par exemple 'utf8 sans bom'.
    Si tu désires convertir en 'utf8 sans bom', tu cliques sur 'convertir en utf-8 sans bom'.
    Si la conversion s'est bien passé, tu auras à la place de tes accents, des caractères illisibles.
    Il faut alors les changer par substitution (oui, c'est plus rapide à faire).

    Il faut savoir que le jeu de caractères se fait de bout en bout dans une application.
    1) il y a le stockage de ton texte dans le fichier.
    2) il y a l'utilitaire de chargement (load data loacal infile)
    3) il y a la base de données et aussi les tables (c'est ce que je t'ai donné).
    4) il y a aussi le transfert des donnéesentre le serveur mysql et le serveur web.
    5) il y a aussi htpm, php, ajax ...
    6) il y a aussi apache.
    7) et si tu travailles en mode console comme moi, tu as aussi l'affichage.
    8) il y a aussi la façon de gérer les comparaisons et les tris avec le collation.

    Gérer un jeu de caractères est une usine à gaz !
    Je n'avais pas ce genre de problème lorsque je travaillais sous gros système IBM car on avait que l'EBCDIC.

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

  5. #5
    Inactif  

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    3 064
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2011
    Messages : 3 064
    Points : 4 605
    Points
    4 605
    Par défaut
    Bonsoir ,

    Merci de toutes ces explications bien précieuses !

    Je garde une note de tout cela bien sous le coude

    Je procède aux modifications sur une base test .

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

Discussions similaires

  1. [MySQL] Caractere '%' dans un champ texte
    Par Loubard21 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 05/07/2011, 14h12
  2. Réponses: 3
    Dernier message: 19/08/2009, 18h25
  3. Curseur à la fin d'un champ texte avec .focus()
    Par Alvaten dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 10/03/2009, 16h17
  4. [CR XI] Alignement d'un champ texte avec la fin d'une section
    Par Skunk007 dans le forum SAP Crystal Reports
    Réponses: 2
    Dernier message: 11/12/2007, 16h23
  5. champs texte sans caracteres blancs
    Par arti2004 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 10/02/2007, 20h39

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