Desværre er phpMyAdmin en af de første php-applikationer, der taler til MySQL om tegnsæt korrekt. Dit problem skyldes højst sandsynligt, at databasen ikke gemmer de korrekte UTF-8-strenge i første omgang.
For at kunne vise tegnene korrekt i phpMyAdmin, skal dataene være korrekt lagret i databasen. Konverter imidlertid databasen til det korrekte tegnsæt, bryder ofte web-apps, der ikke kender tegnsæt-relateret funktion leveret af MySQL.
Må jeg spørge:er MySQL> version 4.1? Hvilken webapp er databasen til? phpBB? Blev databasen migreret fra en ældre version af webappen eller en ældre version af MySQL?
Mit forslag er ikke til bror, hvis den webapp, du bruger, er for gammel og ikke understøttet. Konverter kun databasen til ægte UTF-8, hvis du er sikker på, at webappen kan læse dem korrekt.
Rediger:
Din MySQL er> 4.1, hvilket betyder, at den er tegnsæt-bevidst. Hvad er indstillingerne for tegnsætsortering for din database? Jeg er ret sikker på, at du bruger latin1
, som er MySQL-navnet for ASCII, for at gemme UTF-8-teksten i 'bytes' i databasen.
For tegnsæt-ufølsomme klienter (dvs. mysql-cli og php-mod-mysql), bliver tegn vist korrekt, da de overføres til/fra databasen som bytes. I phpMyAdmin bliver bytes læst og vist som ASCII-tegn, det er den skraldtekst, du ser ud til.
Utallige timer var blevet brugt for år siden (2005?), da MySQL 4.0 blev forældet, i mange dele af Asien. Der er en standard måde at håndtere dit problem og slugte data på:
- Sikkerhedskopier din database som
.sql
- Åbn den i UTF-8-kompatibel teksteditor, sørg for, at de ser korrekte ud.
- Se efter
charset collation latin1_general_ci
, erstatlatin1
tilutf8
. - Gem som en ny sql-fil, overskriv ikke din sikkerhedskopi
- Importer den nye fil, den vil nu se korrekt ud i phpMyAdmin, og japansk på din webapp bliver til spørgsmålstegn. Det er normalt.
- For din php-webapp, der er afhængig af php-mod-mysql, skal du indsætte
mysql_query("SET NAMES UTF8");
eftermysql_connect()
, nu vil spørgsmålstegnene være væk. -
Tilføj følgende konfiguration
my.ini
for mysql-cli:# CLIENT SECTION [mysql] default-character-set=utf8 # SERVER SECTION [mysqld] default-character-set=utf8
For mere information om tegnsæt på MySQL, se venligst manualen: http://dev.mysql.com/doc/refman/5.0/en/charset-server.html
Bemærk, at jeg antager, at din webapp bruger php-mod-mysql til at oprette forbindelse til databasen (deraf mysql_connect()
funktion), da php-mod-mysql er den eneste udvidelse, jeg kan komme i tanke om, som stadig udløser problemet TIL DEN DAG.
phpMyAdmin bruger php-mod-mysqli til at oprette forbindelse til MySQL. Jeg har aldrig lært at bruge det, fordi skift til frameworks* for at udvikle mine php-projekter. Jeg opfordrer kraftigt til, at du også gør det.
- Mange rammer, f.eks. CodeIgniter, Zend, brug mysqli eller pdo til at oprette forbindelse til databaser. mod-mysql-funktioner anses for at være forældede forårsager problemer med ydeevne og skalerbarhed. Du ønsker heller ikke at knytte dit projekt til en bestemt type database.