sql >> Databáze >  >> RDS >> Mysql

Jak zobrazit znaky UTF-8 v phpMyAdmin?

Bohužel, phpMyAdmin je jednou z prvních php aplikací, které mluví s MySQL o znakové sadě správně. Váš problém je s největší pravděpodobností způsoben tím, že databáze nejprve neukládá správné řetězce UTF-8.

Aby se v phpMyAdmin správně zobrazovaly znaky, musí být data správně uložena v databázi. Převedení databáze na správnou znakovou sadu však často naruší webové aplikace, které si neuvědomují funkce související se znakovými sadami poskytované MySQL.

Mohu se zeptat:je MySQL> verze 4.1? Pro jakou webovou aplikaci je databáze určena? phpBB? Byla databáze migrována ze starší verze webové aplikace nebo ze starší verze MySQL?

Můj návrh není bratr, pokud webová aplikace, kterou používáte, je příliš stará a není podporována. Převeďte databázi na skutečné UTF-8 pouze tehdy, pokud jste si jisti, že je webová aplikace dokáže správně přečíst.

Upravit:

Vaše MySQL je> 4.1, to znamená, že podporuje znakové sady. Jaké je nastavení řazení znakových sad pro vaši databázi? Jsem si jistý, že používáte latin1 , což je název MySQL pro ASCII, k uložení textu UTF-8 v 'bajtech' do databáze.

U klientů necitlivých na znakové sady (tj. mysql-cli a php-mod-mysql) se znaky zobrazují správně, protože jsou přenášeny do/z databáze jako bajty. V phpMyAdmin se bajty čtou a zobrazují jako znaky ASCII, to je ten nesmyslný text, jak se zdá.

Před lety (2005?), kdy MySQL 4.0 v mnoha částech Asie zastaralo, se strávilo nespočet hodin. Existuje standardní způsob, jak se vypořádat s vaším problémem a pohlcenými daty:

  1. Zálohujte svou databázi jako .sql
  2. Otevřete jej v textovém editoru s podporou UTF-8 a ujistěte se, že vypadají správně.
  3. Hledejte charset collation latin1_general_ci , nahraďte latin1 na utf8 .
  4. Uložte jako nový soubor SQL, nepřepisujte zálohu
  5. Importujte nový soubor, v phpMyAdmin bude nyní vypadat správně a japonština ve vaší webové aplikaci se stane otazníky. To je normální.
  6. Pro webovou aplikaci php, která se spoléhá na php-mod-mysql, vložte mysql_query("SET NAMES UTF8"); za mysql_connect() , nyní budou otazníky pryč.
  7. Přidejte následující konfiguraci my.ini pro mysql-cli:

    # CLIENT SECTION
    [mysql]
    default-character-set=utf8
    # SERVER SECTION
    [mysqld]
    default-character-set=utf8
    

Další informace o znakové sadě na MySQL naleznete v příručce: http://dev.mysql.com/doc/refman/5.0/en/charset-server.html

Všimněte si, že předpokládám, že vaše webová aplikace používá k připojení k databázi php-mod-mysql (proto mysql_connect() funkce), protože php-mod-mysql je jediné rozšíření, které mě napadá, že stále vyvolává problém DODNES.

phpMyAdmin používá php-mod-mysqli pro připojení k MySQL. Nikdy jsem se nenaučil, jak to používat, protože jsem přešel na frameworky*, abych mohl rozvíjet své php projekty. Důrazně vám doporučuji, abyste to udělali také.

  • Mnoho rámců, např. CodeIgniter, Zend, použijte mysqli nebo pdo pro připojení k databázím. Funkce mod-mysql jsou považovány za zastaralé a způsobují problém s výkonem a škálovatelností. Také nechcete svůj projekt vázat na konkrétní typ databáze.


  1. Jak flexibilní/omezující jsou typy sloupců SQLite?

  2. Odkazování na uživatelem definované typy Oracle přes DBLINK?

  3. Jak zachovat pořadí vkládání na SQL Server

  4. Porovnat řetězce ignorující akcenty v SQL (ORACLE)