Question

Mes scripts sont définitivement enregistrés en UTF-8. Je suis instanciation AOP avec "{$this->engine}:host={$this->host};dbname={$this->name};charset=UTF-8". Mes tableaux utilisent InnoDB et sont à l'aide utf8_general_ci collationnées. Mes pages sont envoyées soit avec l'en-tête Content-Type: text/html; charset=UTF-8 ou l'équivalent <meta>.

Lorsque vous utilisez PDO pour stocker une origine de caractère € soit d'entrée HTTP ou un littéral de chaîne dans le code source, je suis parti avec c3 a2 e2 80 9a c2 ac selon MySQL Workbench 5.2. Récupération de cette base de données et l'afficher sur la page fonctionne bien. Pourtant, dans phpMyAdmin et Workbench, je vois €.

Lors de l'utilisation de ces deux outils pour stocker €, je suis parti avec e2 82 ac, qui est apparemment la bonne représentation UTF-8, mais si je tente de récupérer puis sortie cela avec PHP, est affiché.

Ma question est, d'où vient cet écart se pose et est-il possible d'avoir mes pages Web et des outils de base de données à la fois de travail parfaitement?

Était-ce utile?

La solution

La directive charset dans le DSN est effectivement appliqué MSSQL. J'ai simplement besoin d'exécuter SET NAMES. Désolé à ce sujet.

J'atteint ainsi que:

parent::__construct("{$this->engine}:host={$this->host};dbname={$this->name}",
                    $this->user, $this->password,
                    array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'UTF8'"));

Autres conseils

simply, convert € to an html entity &euro; for the superfix (but you may get the issue with other special chars)

the other side of the problem (and more specifically) is check the mysql character_set_server and the most common cause character_set_client - seeAlso: connection charsets

also, it's important to note that the meta equiv makes no difference, you need to always set the header('Content-Type: ...)

Since your HTML page is correct, it seems that you're storing the correct data in the database.

€ is the UTF-8 encoding of the Euro sign misinterpreted as windows-1252. It appears that your Windows tools use "ANSI" encoding instead of the database encoding.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top