sql >> Databasteknik >  >> Database Tools >> phpMyAdmin

MySQL matar ut västerländsk kodning i UTF-8 PHP-fil

Använd mysqli_set_charset för att ändra klientkodningen till UTF-8 precis efter att du anslutit:

$mysqli->set_charset("utf8");

Klientkodningen är vad MySql förväntar sig att din inmatning ska vara i (t.ex. när du infogar text från användaren i en sökfråga) och vad den ger dig resultaten i (så den måste matcha din utkodning för att echo för att visa saker korrekt).

Du måste ha den stämmer överens med kodningen på din webbsida för att ta hänsyn till de två scenarierna ovan och kodningen av PHP-källfilen (så att de hårdkodade delarna av dina frågor tolkas korrekt).

Uppdatering:Hur man konverterar data som infogats med latin-1 till utf-8

När det gäller data som redan har infogats med fel anslutningskodning finns det en bekväm lösning för att åtgärda problemet. För varje kolumn som innehåller den här typen av data måste du göra:

ALTER TABLE table_name MODIFY column_name existing_column_type CHARACTER SET latin1;
ALTER TABLE table_name MODIFY column_name BLOB;
ALTER TABLE table_name MODIFY column_name existing_column_type CHARACTER SET utf8;

Platshållarna table_name , column_name och existing_column_type ska ersättas med korrekta värden från din databas varje gång.

Vad detta gör är

  1. Berätta för MySql att den behöver lagra data i den kolumnen på latin1. Denna teckenuppsättning innehåller bara en liten delmängd av utf8 så i allmänhet innebär denna konvertering dataförlust, men i det här specifika scenariot tolkades data redan som latin1 vid inmatning så det kommer inga biverkningar. MySql kommer dock internt att konvertera byte-representationen av dina data för att matcha det som ursprungligen skickades från PHP.
  2. Konvertera kolumnen till en binär typ (BLOB ) som inte har någon associerad kodningsinformation. Vid det här laget kommer kolumnen att innehålla råbytes som är en riktig utf8-teckensträng.
  3. Konvertera kolumnen till dess tidigare teckentyp och tala om för MySql att de råa byten ska anses vara i utf8-kodning.

VARNING:Du kan bara använda denna urskillningslösa metod om kolumnen i fråga innehåller endast felaktigt infogade data. All data som har infogats korrekt kommer att trunkeras vid första förekomsten av ett icke-ASCII-tecken!

Därför är det en bra idé att göra det redan nu, innan PHP-sidokorrigeringen träder i kraft.



  1. phpMyAdmin-konfigurationslagringen är inte helt konfigurerad

  2. Fatalt fel:Uncaught ArgumentCountError:För få argument för att fungera Admincategory::deletecategory(),

  3. phpMyAdmin Fel vid bearbetning av begäran Felkod:500 Feltext:Internt serverfel

  4. SSIS skriptuppgift misslyckas version 15.0 skript?