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

Langage SQL Discussion :

Présence de caractères spéciaux dans mes tables pour UTF-8 [Débutant(e)]


Sujet :

Langage SQL

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    avril 2011
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : avril 2011
    Messages : 16
    Points : 16
    Points
    16
    Par défaut Présence de caractères spéciaux dans mes tables pour UTF-8
    Bonjour,


    J'ai à ma disposition des tables avec des champs de type VARCHAR et TEXT.
    Les tables possèdent comme collation (ou interclassement?) par défaut: utf8_unicode_ci
    Mais je m'aperçois lorsque je consulte mes données des mots comme "Générale" qui devrait être "Générale"
    Ainsi que d'autres caractères pour tous les lettres avec des accents.

    J'ai essayé manuellement de les repérer dans mes données qui est assez énormes ( 10 000 de lignes de données environ dans une table)
    Et de les remplacer avec cette requête pour chaque colonne de mes tables:

    Par exemple, j'ai une table document contenant des champs de type VARCHAR pour le champ titre, et pour le champ auteur et de type TEXT pour le champ resume.


    J'utilise cette requete pour une colonne, ici resume:

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    UPDATE document
    SET resume = replace(replace(replace(replace(replace(replace(resume,'é', 'é'),'è', 'è'), 'ç', 'ç'), 'ô', 'ô'), 'ï', 'ï'), 'ë', 'ë')
    WHERE (resume LIKE '%é%') OR
     (resume LIKE '%Ã%¨') OR 
     (resume LIKE '%ç%') OR 
     (resume LIKE '%Ã%') OR 
     (resume LIKE '%ï%') OR 
     (resume LIKE '%ë%');


    Il y a certainement des caractères que j'ai oublié dans ma requête. Je compte appliquer cette requête à toutes les colonnes de mes tables possédant des types TEXT et VARCHAR.

    Existe t-il un moyen pour remédier à ce problème d'une meilleur façon?
    Merci d'avance

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    mai 2002
    Messages
    21 185
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : mai 2002
    Messages : 21 185
    Points : 50 429
    Points
    50 429
    Billets dans le blog
    1
    Par défaut
    Il est stupide d'utiliser une collation de type UTF8 pour une base de données. Ceci ne peut que conduire à des problématique de conversion et de performances. UTF8 a été créé pour faire de la compression de données à la volée dans les flux HTPP et n'est réellement intéressant que pour la langue anglaise qui ne comporte aucun caractère diacritique (accents, cédille, ligature...).
    Reprenez votre base avec une collation Latin et tout ira mieux.

    Je suppose que vous êtes sur MySQmerde ?
    Lisez ceci :
    http://stackoverflow.com/questions/3...mysql-with-php


    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/ * * * * *

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    avril 2011
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : avril 2011
    Messages : 16
    Points : 16
    Points
    16
    Par défaut
    Merci de ta réponse.
    Donc utf8_unicode_ci est à proscrire dans ma base de donnée. Je ne savais pas :/
    J'ai pensé à un truc, il faudrait que je refasse une exportation de la base d'origine, j'ai dû modifier la collation lors de l'export peut être, je vais vérifier cela.

    Sinon j'ai changer en latin1_general_ci, bon cela ne résout pas les "Générale" présents dans mes données.
    Je vais voir tout cela.

    Merci

  4. #4
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    mai 2002
    Messages
    21 185
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : mai 2002
    Messages : 21 185
    Points : 50 429
    Points
    50 429
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par bobyboby1 Voir le message
    Sinon j'ai changer en latin1_general_ci, bon cela ne résout pas les "Générale" présents dans mes données.
    Je vais voir tout cela.

    Merci
    Une fois les octets stockées mal transformés ils vont rester stockés mal transformé !

    Il faut refaire l'import.

    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/ * * * * *

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    avril 2011
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : avril 2011
    Messages : 16
    Points : 16
    Points
    16
    Par défaut
    D'acc merci

  6. #6
    Membre averti
    Homme Profil pro
    Ingénieur en études décisionnelles
    Inscrit en
    février 2013
    Messages
    134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur en études décisionnelles

    Informations forums :
    Inscription : février 2013
    Messages : 134
    Points : 351
    Points
    351
    Par défaut
    Bonjour,

    J'ai une question complémentaire. Je suis face à un cas où je suis gêné par le peu de caractère utilisables par les collations Latin.
    Je suis sur une base de données Oracle 11g2, dans laquelle j'intègre des fichiers plats. Ces fichiers ont des origines internationales.


    Pour essayer de suivre les conseils d'SQLPro, j'utilise un encodage Latin pour lire mon fichier dans un premier temps.
    En Latin-1 (ISO-8859-1), j'ai le caractère "Œ" qui ne s'intègre pas.
    En Latin-9 (ISO-8859-15), c'est le caractère " ’ " qui ne s'intègre pas (différent de l'apostrophe simple " ' ")
    Ce caractère a été remplacé entre Latin-1 et Latin-9.


    Je suis tenté d'utiliser UTF-8, ça marche bien dans mon flux d'intégration de données, mais le message ci-dessus me fait penser que ce n'est pas une bonne pratique.
    Mais comment faire autrement ?

  7. #7
    Membre éclairé Avatar de Arkhena
    Profil pro
    Inscrit en
    décembre 2006
    Messages
    552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : décembre 2006
    Messages : 552
    Points : 769
    Points
    769
    Par défaut
    Bonjour,

    Le problème d'UTF-8, c'est que les chaînes de caractères comportant des caractères non anglais prendront plus de place. Ils seront par contre bien supportés.

    Cordialement,

    Arkhena
    A bove ante, ab asino retro, a stulto undique caveto

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

Discussions similaires

  1. Caractères spéciaux dans une table SAS
    Par sniper75 dans le forum SAS Base
    Réponses: 4
    Dernier message: 05/08/2014, 16h15
  2. caractères spéciaux dans une table
    Par aix13 dans le forum Informix
    Réponses: 4
    Dernier message: 17/03/2009, 19h50
  3. caractères spéciaux dans mes repertoires
    Par ober007 dans le forum Administration système
    Réponses: 3
    Dernier message: 05/02/2009, 18h06
  4. Caractères spéciaux dans le nom des tables
    Par xx_FiFty_xx dans le forum Requêtes
    Réponses: 4
    Dernier message: 25/06/2008, 12h30
  5. Réponses: 3
    Dernier message: 26/11/2006, 21h05

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