Précédent   Forum des professionnels en informatique > Bases de données > MySQL
MySQL Forum d'entraide MySQL. Avant de poster -> FAQ MySQL, Tutoriels MySQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 24/06/2011, 16h53   #1
Membre régulier
 
Inscription : octobre 2007
Messages : 199
Détails du profil
Informations forums :
Inscription : octobre 2007
Messages : 199
Points : 77
Points : 77
Par défaut UTF 8 and co

Bonjour,
La langue des données stockées est : le français.
C'est à dire avec des éèàùô....
L'interclassement du champ de stockage est : utf8_swedish_ci.
J'ai aussi essayé : latin1_swedish_ci.

Quel est le bon ? Ou faut-il abandonner MySQL ?

La page xhtml commence par :
Code :
1
2
3
[<?xml version="1.0" encoding="ISO-8859-15" ?>'
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
J'ai aussi essayé :
Code :
1
2
3
4
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
Sincèrement, je craque
Quel interclassement pour que MySQL accepte le français ?
Et quelle est la bonne entête de page xhtml ?
Parce qu'aujourd'hui quand dans un formulaire mon client écrit "Françoise" (par ex) le résultat obtenu relève du n'importe quoi !
Merci !
JLC83 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/06/2011, 20h29   #2
Modérateur
 
Avatar de Bisûnûrs
 
Josselin
Développeur Web
Inscription : janvier 2004
Messages : 9 050
Détails du profil
Informations personnelles :
Nom : Josselin
Âge : 29
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : janvier 2004
Messages : 9 050
Points : 12 181
Points : 12 181
Tu as l'air de tout mélanger, en plus d'en louper la moitié .. Je t'invite à lire ce tutoriel :
http://j-willette.developpez.com/tut...-site-en-utf8/
qu'on peut évidemment aussi transposer en ISO-8859-1.
Bisûnûrs est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/06/2011, 22h09   #3
ced
Rédacteur/Modérateur

 
Avatar de ced
 
Homme Cédric Duprez
Inscription : avril 2002
Messages : 3 823
Détails du profil
Informations personnelles :
Nom : Homme Cédric Duprez
Âge : 36
Localisation : France, Loiret (Centre)

Informations professionnelles :
Secteur : Agroalimentaire - Agriculture

Informations forums :
Inscription : avril 2002
Messages : 3 823
Points : 6 437
Points : 6 437
Tu peux également trouver de nombreuses réponses à tes questions dans le tutoriel suivant : http://antoun.developpez.com/mysql5/jeux-collations/
__________________
Rédacteur / Modérateur SGBD
Mes tutoriels et la FAQ MySQL

----------------------------------------------------
Pensez aux balises code et au tag
Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça
ced est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/06/2011, 09h50   #4
Membre régulier
 
Inscription : octobre 2007
Messages : 199
Détails du profil
Informations forums :
Inscription : octobre 2007
Messages : 199
Points : 77
Points : 77
Oui, je mélange un peu tout c'est précisément pour cela que je n'y vois pas clair
Merci de vos réponses.
Je vais de ce pas consulter les liens de vos conseils
JLC83 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/06/2011, 11h21   #5
Membre régulier
 
Inscription : octobre 2007
Messages : 199
Détails du profil
Informations forums :
Inscription : octobre 2007
Messages : 199
Points : 77
Points : 77
Après avoir pris connaissance des différents documents, je constate qu'enregistrer du français dans une base de donnée et de l'afficher correctement sur différents navigateurs est une gageure
Je vais essayer.
TOUTEFOIS : ne serait-il pas plus simple de tout encoder en base 64 ?
PHP fera le reste.
Dans ce cas, faire des recherches sur un champs texte contenant du code base 64 serait aussi performant ?
Merci
JLC83 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/06/2011, 12h42   #6
Membre régulier
 
Inscription : octobre 2007
Messages : 199
Détails du profil
Informations forums :
Inscription : octobre 2007
Messages : 199
Points : 77
Points : 77
Par défaut TOUT SE COMPLIQUE

Je n'y arrive pas :
Le champ est en utf8_unicode_ci dans MySQL ainsi que la table.
J'utilise deux pages de tests dont les entêtes sont :
Code :
1
2
<?php header('content-type: text/html; charset=ISO-8859-1'); ?>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
ou pour le même résultat :
Code :
1
2
<?php header('content-type: text/html; charset=utf-8'); ?>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
Voici le test sur le champ prénom :
Nom : Albert
Prénom : àùçë-ô

Le résultat sur Prénom est : à ùçë-ô

Les bras m'en tombent
JLC83 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/06/2011, 12h59   #7
Modérateur
 
Avatar de Bisûnûrs
 
Josselin
Développeur Web
Inscription : janvier 2004
Messages : 9 050
Détails du profil
Informations personnelles :
Nom : Josselin
Âge : 29
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : janvier 2004
Messages : 9 050
Points : 12 181
Points : 12 181
Et l'enregistrement de ton fichier en UTF-8 sans BOM ? Et la connexion à la base de données ?

Faudrait penser à lire les articles en entier.
Bisûnûrs est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/06/2011, 13h57   #8
Membre régulier
 
Inscription : octobre 2007
Messages : 199
Détails du profil
Informations forums :
Inscription : octobre 2007
Messages : 199
Points : 77
Points : 77
"Et l'enregistrement de ton fichier en UTF-8 sans BOM ? Et la connexion à la base de données ?"
L'enregistrement : sous zend studion : editer choix possibles utf8 (sans BOM n'y est pas). Dois-je changer d'éditeur de code (300€) pour utiliser MySQL ?
Connexion à la base de donnée : PDO.
Application stricte des paramètres.
J'ai lu les articles en entier ; je les ai appliqués avec les moyens de développement disponibles.
Le résultat n'y est pas après trois heures de travail.
Je ne pensais pas qu'un SGBD comme MySQL demandât autant d'adaptation de la part de ses utilisateurs.
Je suis surpris que ce SGBDR pose pas autant de problèmes pour enregistrer une langue utilisée par des centaines de millions de personnes.
Merci
Base 64 semble être la technologie la mieux adapté à ce SGBDR :-(
JLC83 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/06/2011, 14h34   #9
Modérateur
 
Avatar de Bisûnûrs
 
Josselin
Développeur Web
Inscription : janvier 2004
Messages : 9 050
Détails du profil
Informations personnelles :
Nom : Josselin
Âge : 29
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : janvier 2004
Messages : 9 050
Points : 12 181
Points : 12 181
Tous les éditeurs font la distinction entre l'UTF-8 et l'UTF-8 sans BOM. Peut-être que Zend Studio emploie un autre terme, comme "sans marque d'ordre des octets" ou en anglais "without byte order mark".

L'utilisation de PDO ne t'affranchit pas de préciser le jeu de caractères utilisé lors des échanges PHP/MySQL. Juste après la connexion, tu dois exécuter la requête :
Mais si tu as un site uniquement en français et sans intention de l'internationaliser, tu peux rester en ISO-8859-1.

Ce qui fait que :
1. Tes fichiers sont enregistrés en ANSI (ou Windows-1252 (Europe Occidentale))
2. La meta HTML et le header PHP renseigne le charset comme étant ISO-8559-1
3. Tes champs en bases de données seront alors en latin1_general_ci par exemple
4. La précision du jeu utilisé lors des échanges PHP/MySQL ne te sera plus utile.
Bisûnûrs est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/06/2011, 14h37   #10
Membre régulier
 
Inscription : octobre 2007
Messages : 199
Détails du profil
Informations forums :
Inscription : octobre 2007
Messages : 199
Points : 77
Points : 77
Pour continuer :
La connexion :
Code :
1
2
try{$this->bx[$i] = new PDO($this->dsn[$i], $this->lUt, $this->passe, array(PDO::ATTR_PERSISTENT=>true, PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));
}catch (PDOException $e){print "Erreur Programmeur ! : ".$e->getMessage()."<br/>"; die();}
Oui, dans "edit" j'ai bien sélectionné UTF8 et j'ai aussi réalisé les tests avec ISO-8859-1 qui normalement est la norme internationale...
Même résultat décevant.
JLC83 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/06/2011, 15h58   #11
Membre régulier
 
Inscription : octobre 2007
Messages : 199
Détails du profil
Informations forums :
Inscription : octobre 2007
Messages : 199
Points : 77
Points : 77
Ok,
Ce site est destiné uniquement à des français.
Je vais suivre tes conseils. Merci !
Mais un jour ou l'autre, il faudra bien que je maîtrise tout cela...
Je vais y passer mon dimanche matin :-/
Encore merci pour le coup de main !
JLC83 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/06/2011, 18h13   #12
Membre régulier
 
Inscription : octobre 2007
Messages : 199
Détails du profil
Informations forums :
Inscription : octobre 2007
Messages : 199
Points : 77
Points : 77
Par défaut arghh !

Je viens donc de passer en latin1.
Accès à phpAdmin : latin1_swedish_ci
Interclassement des champs : idem
En-tête de la page :
Code :
 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
Champ prénom en saisie "àçéè"
Champ tel que stocké : "à çéè"

Avant d'essayer latin1_general_ci (car les tables contiennent quelques 100 000 données et que je risque de devoir recréer bases, tables, champs et réimporter - j'ignore comment du reste ni avec quel outil....)
Je voudrais que vous me guidiez un peu :
Ce que je compte faire a une chance d'aboutir ?
Le problème vient d'ailleurs ?
...
Merci
JLC83 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/06/2011, 18h28   #13
Modérateur
 
Avatar de Bisûnûrs
 
Josselin
Développeur Web
Inscription : janvier 2004
Messages : 9 050
Détails du profil
Informations personnelles :
Nom : Josselin
Âge : 29
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : janvier 2004
Messages : 9 050
Points : 12 181
Points : 12 181
- Tu n'as pas laissé le SET NAMES ?
- Tes fichiers sont bien enregistrés en ANSI ?
- Tu as bien mis le header PHP en ISO-8859-1 (et ce sur tous les fichiers même inclus) ?
- T'as pas un utf8_encode() qui traine ?

Si tu as peur qu'un ALTER TABLE te prenne trop de temps, tu peux créer une nouvelle table :
Code :
1
2
3
mysql> CREATE TABLE `table2` LIKE `table1`;
# Là tu modifies ton champ en latin1_general_ci
mysql> INSERT INTO `table2` SELECT * FROM `table1`;
Bisûnûrs est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/06/2011, 09h36   #14
Membre régulier
 
Inscription : octobre 2007
Messages : 199
Détails du profil
Informations forums :
Inscription : octobre 2007
Messages : 199
Points : 77
Points : 77
MERCI !!!!
Voilà tout simplement :
Code :
1
2
3
mysql> CREATE TABLE `table2` LIKE `table1`;
# Là tu modifies ton champ en latin1_general_ci
mysql> INSERT INTO `table2` SELECT * FROM `table1`;
M'a donné l'idée : c'est la base de donnée et non la table qui à la création était dans la mauvaise collation. D'où l'erreur "#1267 - Illegal mix of collations ".

Existe-t-il du code me permettant de dupliquer une base de données entière pour seulement changer l'interclassement ?

Depuis une base en utf8 et une autre en latin1_general_ci cohabitent à merveille.
Il faut juste pour passer définitivement en utf8 que je revoie tout mon code sur le traitement des chaînes de caractère car je crois que la fonction strlen de PHP va poser problèmes...
Merci quand même !
Jean-Louis
JLC83 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/06/2011, 09h40   #15
Modérateur
 
Avatar de Bisûnûrs
 
Josselin
Développeur Web
Inscription : janvier 2004
Messages : 9 050
Détails du profil
Informations personnelles :
Nom : Josselin
Âge : 29
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : janvier 2004
Messages : 9 050
Points : 12 181
Points : 12 181
Il n'existe pas un code tout prêt pour faire ça, non, tu peux à la rigueur faire ta propre routine.

Pour ce qui est des fonctions PHP, pour toutes les fonctions de manipulation de chaine, il faut en effet passer par des fonctions qui gèrent le multi-octets.
Bisûnûrs est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/06/2011, 10h59   #16
Membre régulier
 
Inscription : octobre 2007
Messages : 199
Détails du profil
Informations forums :
Inscription : octobre 2007
Messages : 199
Points : 77
Points : 77
Ok !
Merci pour ce lien - super.
Et encore merci pour toute cette aide en particulier à "Bisûnûrs"
JLC83 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 01h55.


 
 
 
 
Partenaires

Hébergement Web