sql >> Databasteknik >  >> RDS >> Mysql

konstig teckenkodning av lagrad data, gammalt skript visar dem bra, nytt gör det inte

Kort sagt, för detta har diskuterats tusen gånger tidigare:

  1. PHP innehåller en sträng, säg "漢字" , kodad i UTF-8. Byten för detta är E6 BC A2 E5 AD 97 .
  2. Den skickar den här strängen över en databasanslutning som är inställd på latin1 .
  3. Databasen tar emot byten E6 BC A2 E5 AD 97 , tror att de representerar latin1 tecken.
  4. Databasen lagrar tecknen æ¼¢å­ (tecken som E6 BC A2 E5 AD 97 mappar till latin1 ).
  5. Samma process omvänd gör att PHP tar emot samma byte, som det sedan behandlar som UTF-8. Rundturen fungerar bra för PHP, även om databasen inte behandlar tecknen som den ska.

Så problemet här var att databasanslutningen var felaktigt inställd när data matades in i databasen. Du måste konvertera data i databasen till rätt tecken. Prova detta:

SELECT CONVERT(BINARY CONVERT(field_name USING latin1) USING utf8) FROM table_name

Kanske utf8 är inte vad du behöver här, experimentera. Om det fungerar, ändra detta till en UPDATE uttalande för att uppdatera data permanent.



  1. Hur lagrar man flera alternativ i en enda tabell?

  2. Ansluter PostgreSQL 9.2.1 till Hibernate

  3. Hur man hanterar en tabellkolumn med ett reserverat SQL-sökord?

  4. Hur UUID_SHORT() fungerar i MariaDB