sql >> Database >  >> RDS >> Mysql

Hoe UTF-8-tekens weergeven in phpMyAdmin?

Helaas is phpMyAdmin een van de eerste php-applicaties die correct met MySQL over charset praat. Uw probleem is hoogstwaarschijnlijk te wijten aan het feit dat de database in eerste instantie niet de juiste UTF-8-strings opslaat.

Om de karakters correct weer te geven in phpMyAdmin, moeten de gegevens correct zijn opgeslagen in de database. Het omzetten van de database naar de juiste tekenset breekt echter vaak web-apps die de tekenset-gerelateerde functie van MySQL niet kennen.

Mag ik vragen:is MySQL> versie 4.1? Voor welke web-app is de database bedoeld? phpBB? Is de database gemigreerd vanuit een oudere versie van de webapp of een oudere versie van MySQL?

Mijn suggestie is om broer niet te gebruiken als de web-app die je gebruikt te oud is en niet wordt ondersteund. Converteer database alleen naar echte UTF-8 als u zeker weet dat de webapp ze correct kan lezen.

Bewerken:

Uw MySQL is> 4.1, wat betekent dat het charset-bewust is. Wat zijn de instellingen voor het sorteren van tekensets voor uw database? Ik ben er vrij zeker van dat je latin1 . gebruikt , de MySQL-naam voor ASCII, om de UTF-8-tekst in 'bytes' op te slaan in de database.

Voor charset-ongevoelige clients (d.w.z. mysql-cli en php-mod-mysql), worden tekens correct weergegeven omdat ze als bytes naar/van de database worden overgebracht. In phpMyAdmin worden bytes gelezen en weergegeven als ASCII-tekens, dat is de rommeltekst die je lijkt.

Jaren geleden (2005?) waren er talloze uren aan besteed toen MySQL 4.0 in veel delen van Azië verouderd raakte. Er is een standaardmanier om met uw probleem en opgeslokte gegevens om te gaan:

  1. Maak een back-up van uw database als .sql
  2. Open het in UTF-8-compatibele teksteditor, zorg ervoor dat ze er correct uitzien.
  3. Zoek naar charset collation latin1_general_ci , vervang latin1 naar utf8 .
  4. Opslaan als een nieuw sql-bestand, overschrijf je back-up niet
  5. Importeer het nieuwe bestand, ze zien er nu correct uit in phpMyAdmin, en Japans in je web-app worden vraagtekens. Dat is normaal.
  6. Voor uw php-webapp die afhankelijk is van php-mod-mysql, voegt u mysql_query("SET NAMES UTF8"); in na mysql_connect() , nu zijn de vraagtekens verdwenen.
  7. Voeg de volgende configuratie toe my.ini voor mysql-cli:

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

Raadpleeg de handleiding voor meer informatie over charset op MySQL: http://dev.mysql.com/doc/refman/5.0/en/charset-server.html

Merk op dat ik aanneem dat je web-app php-mod-mysql gebruikt om verbinding te maken met de database (vandaar de mysql_connect() functie), aangezien php-mod-mysql de enige extensie is die ik kan bedenken die het probleem tot op de huidige dag veroorzaakt.

phpMyAdmin gebruikt php-mod-mysqli om verbinding te maken met MySQL. Ik heb nooit geleerd hoe ik het moet gebruiken omdat ik overschakel naar frameworks* om mijn php-projecten te ontwikkelen. Ik raad je ten zeerste aan dat ook te doen.

  • Veel frameworks, b.v. CodeIgniter, Zend, gebruik mysqli of pdo om verbinding te maken met databases. mod-mysql-functies worden als verouderd beschouwd vanwege het probleem met de prestaties en schaalbaarheid. U wilt uw project ook niet aan een specifiek type database koppelen.


  1. DATEDIFF() Voorbeelden – MySQL

  2. Er is een netwerkgerelateerde of instantiespecifieke fout opgetreden bij het tot stand brengen van een verbinding met SQL Server

  3. Hoe verander je 2 zoekopdrachten met gemeenschappelijke kolommen (A, B) en (A, C) in slechts één (A, B, C)?

  4. Een Oracle-procedure aanroepen met een PL/SQL-verzamelingstypeparameter via .NET