Bienvenue visiteur (Inscription |  Connexion)
Qui est en ligne ?
Il y a : 11 utilisateurs en ligne, consultez le détail
Auteur Message
jerep6
#0 Message posté le : 18-03-2007 à 16:09:04


Scarabée


Forum : Inscrit
Association :
Arrivé(e) le : 14-08-2005
Nombre de messages : 488
Salut les gens.

J'ai un fichier *.sql encodé en iso : ac.sql: ISO-8859 C program text, with very long lines.

En graphique avec phpmyadmin :
Je crée une base dans mysql encodé en latin1, j'importe ce fichier en choisissant comme encodage latin1. Normalement le texte devrait être enregistré dans la base en latin1 et ben non, il est stocké en utf8.

En ligne de commande :

mysql> CREATE DATABASE `acimflo` DEFAULT CHARACTER SET latin1 COLLATE latin1_general_ci;
Quand je tente de remplir ma table avec mysqldump ça ne marche pas :
mysqldump acimflo < ac.sql -p

Enter password:

-- MySQL dump 10.11

--

-- Host: localhost    Database: acimflo

-- ------------------------------------------------------

-- Server version       5.0.34-log



/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;

/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;

/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;

/*!40101 SET NAMES latin1 */;

/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;

/*!40103 SET TIME_ZONE='+00:00' */;

/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;

/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;

/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;

/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;

/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;



/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;

/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;

/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;

/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;

/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;

/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;

/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;



-- Dump completed on 2007-03-18 14:53:34


Dans l'accueil de phpmyadmin j'ai ça : MySQL charset: UTF-8 Unicode (utf8).
Mes USE de mysql : [ebuild R ] dev-db/mysql-5.0.34 USE="berkdb perl ssl -big-tables -cluster -debug -embedded -extraengine -latin1* -max-idx-128 -minimal (-selinux) -static" 0 kB
Mes locales :
LANG=

LC_CTYPE="en_US.UTF-8"

LC_NUMERIC="en_US.UTF-8"

LC_TIME="en_US.UTF-8"

LC_COLLATE="en_US.UTF-8"

LC_MONETARY="en_US.UTF-8"

LC_MESSAGES="en_US.UTF-8"

LC_PAPER="en_US.UTF-8"

LC_NAME="en_US.UTF-8"

LC_ADDRESS="en_US.UTF-8"

LC_TELEPHONE="en_US.UTF-8"

LC_MEASUREMENT="en_US.UTF-8"

LC_IDENTIFICATION="en_US.UTF-8"

LC_ALL=en_US.UTF-8

Dans un script php quand je mets ces lignes je vois les données encodées en iso (mais en réalité elles sont tjs en utf8 dans la base) :
mysql_query( "SET CHARACTER SET 'latin1'" ); mysql_query( "SET NAMES 'latin1'" );

Pourquoi les données sont encodées en utf8 et non pas en iso ?
Merci.
Azollyx
#1 Message posté le : 18-03-2007 à 16:50:15


Naboo


Forum : Modérateur
Association : Président
Arrivé(e) le : 09-04-2006
Nombre de messages : 2085
Parce que ta locale est en UTF8.
De toutes manières, qu'est-ce que cela change ? Des données ce sont des données, quelque soit leur encodage. Peut-être qu'elles sont encodées en unicode mais tu dois pouvoir les convertir ou demander à y accéder en iso ; la preuve !
Quel est le problème réel ?

-------------------------------------
toto
jerep6
#2 Message posté le : 18-03-2007 à 17:40:40


Scarabée


Forum : Inscrit
Association :
Arrivé(e) le : 14-08-2005
Nombre de messages : 488
Le problème c'est que dans la page html encodée en iso je ne vois pas les caractères accentués (ce de la BD). Si je mets le charset de la page html en utf8 c'est les caractères accentués de la page qui passe mal.

Je vais tout passer en utf8 mais j'aurais aimé comprendre mon problème d'encodage dans la BD.
Azollyx
#3 Message posté le : 18-03-2007 à 18:05:51


Naboo


Forum : Modérateur
Association : Président
Arrivé(e) le : 09-04-2006
Nombre de messages : 2085
Bah, tu dis ça :
Dans un script php quand je mets ces lignes je vois les données encodées en iso (mais en réalité elles sont tjs en utf8 dans la base) :
mysql_query( "SET CHARACTER SET 'latin1'" ); mysql_query( "SET NAMES 'latin1'" );



--Message édité par Azollyx le 18-03-2007 à 18:06:09--


-------------------------------------
toto
jblecanard
#4 Message posté le : 18-03-2007 à 18:12:38


Jedi


Forum : Modérateur
Association : Membre fondateur
Arrivé(e) le : 08-01-2005
Nombre de messages : 4030
C'est normal car PHP ne gère pas l'utf8 pour le moment. Il faut utiliser des fonctions peu fiables comme utf8_encode et utf8_decode.

Je te recommande d'utiliser html_entities en PHP pour convertir les carctères accentués en code HTML.

-------------------------------------
C'est une situation bien inconfortable que d'être assez sensible à la bêtise pour en souffrir et trop intelligent pour s'en indigner. - Gustave Thibon -
jerep6
#5 Message posté le : 18-03-2007 à 18:42:24


Scarabée


Forum : Inscrit
Association :
Arrivé(e) le : 14-08-2005
Nombre de messages : 488
ok, j'utiliserais html_entities.

Si je comprends bien , on ne peux pas stocker des données dans un autre encodage que celui des locales ?

Si oui ---> résolu.
Azollyx
#6 Message posté le : 18-03-2007 à 21:33:59


Naboo


Forum : Modérateur
Association : Président
Arrivé(e) le : 09-04-2006
Nombre de messages : 2085
Je pense que c'est au niveau de la configuration de MySQL qu'il faut intervenir et non au niveau du script PHP.

-------------------------------------
toto
jblecanard
#7 Message posté le : 18-03-2007 à 22:44:10


Jedi


Forum : Modérateur
Association : Membre fondateur
Arrivé(e) le : 08-01-2005
Nombre de messages : 4030
Moi je pense que c'est au niveau des deux, tout simplement. Les histoires d'encodage ne sont jamais simples. Côté PHP, il faut éviter de sortir des accents, et côté MySQL... ce n'est pas très important du moment qu'on sait comment sont encodées les données.

De mon côté, j'utilise toujours l'utf8 avec MySQL. ça ne m'a pour le moment posé aucun problème...

-------------------------------------
C'est une situation bien inconfortable que d'être assez sensible à la bêtise pour en souffrir et trop intelligent pour s'en indigner. - Gustave Thibon -