sql >> Databasteknik >  >> RDS >> Mysql

Hur visar man UTF-8-tecken i phpMyAdmin?

Tyvärr är phpMyAdmin en av de första php-applikationerna som pratar med MySQL om teckenuppsättning korrekt. Ditt problem beror med största sannolikhet på att databasen inte lagrar rätt UTF-8-strängar från början.

För att korrekt visa tecknen korrekt i phpMyAdmin måste data vara korrekt lagrad i databasen. Men konvertera databasen till korrekt teckenuppsättning bryter ofta webbappar som inte känner till teckenuppsättningsrelaterad funktion som tillhandahålls av MySQL.

Får jag fråga:är MySQL> version 4.1? Vilken webbapp är databasen till för? phpBB? Migrerades databasen från en äldre version av webbappen eller en äldre version av MySQL?

Mitt förslag är att inte brodern om webbappen du använder är för gammal och inte stöds. Konvertera endast databas till riktig UTF-8 om du är säker på att webbappen kan läsa dem korrekt.

Redigera:

Din MySQL är> 4.1, det betyder att den är teckenuppsättningsmedveten. Vilka är inställningarna för sortering av teckenuppsättningar för din databas? Jag är ganska säker på att du använder latin1 , som är MySQL-namnet för ASCII, för att lagra UTF-8-texten i "bytes", i databasen.

För teckenuppsättningsokänsliga klienter (dvs mysql-cli och php-mod-mysql), visas tecken korrekt eftersom de överförs till/från databasen som byte. I phpMyAdmin läses bytes och visas som ASCII-tecken, det är den skräptext du verkar.

Oräkneliga timmar hade spenderats för år sedan (2005?) när MySQL 4.0 blev föråldrad, i många delar av Asien. Det finns ett standardsätt att hantera ditt problem och slukade data:

  1. Säkerhetskopiera din databas som .sql
  2. Öppna den i UTF-8-kompatibel textredigerare, se till att de ser korrekta ut.
  3. Leta efter charset collation latin1_general_ci , ersätt latin1 till utf8 .
  4. Spara som en ny sql-fil, skriv inte över din säkerhetskopia
  5. Importera den nya filen, de ser nu ut korrekt i phpMyAdmin, och japanska i din webbapp kommer att bli frågetecken. Det är normalt.
  6. För din php-webbapp som är beroende av php-mod-mysql, infoga mysql_query("SET NAMES UTF8"); efter mysql_connect() , nu kommer frågetecknen att vara borta.
  7. Lägg till följande konfiguration my.ini för mysql-cli:

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

För mer information om teckenuppsättning på MySQL, se manualen: http://dev.mysql.com/doc/refman/5.0/en/charset-server.html

Observera att jag antar att din webbapp använder php-mod-mysql för att ansluta till databasen (därav mysql_connect() funktion), eftersom php-mod-mysql är den enda tillägget jag kan komma på som fortfarande utlöser problemet ÄN DENNA DAG.

phpMyAdmin använder php-mod-mysqli för att ansluta till MySQL. Jag lärde mig aldrig hur man använder det eftersom jag byter till ramverk* för att utveckla mina php-projekt. Jag rekommenderar starkt att du också gör det.

  • Många ramverk, t.ex. CodeIgniter, Zend, använd mysqli eller pdo för att ansluta till databaser. mod-mysql-funktioner anses vara föråldrade orsakar problem med prestanda och skalbarhet. Du vill inte heller koppla ditt projekt till en specifik typ av databas.


  1. Använda aggregerade funktioner (SUM, AVG, MAX, MIN, COUNT, DISTINCT) i MySQL

  2. Hur man får gårdagens datum i SQLite

  3. Flera index vs index med flera kolumner

  4. MariaDB 10.6 och NextCloud:COMPRESSED Row är skrivskyddad som standard