Mysql
 sql >> база данни >  >> RDS >> Mysql

странно кодиране на символи на съхранените данни, старият скрипт им показва добре, новият не го прави

Накратко, защото това е обсъждано хиляди пъти преди:

  1. PHP съдържа низ, кажете "漢字" , кодиран в UTF-8. Байтовете за това са E6 BC A2 E5 AD 97 .
  2. Изпраща този низ през връзка с база данни, която е настроена на latin1 .
  3. Базата данни получава байтовете E6 BC A2 E5 AD 97 , мислейки, че представляват latin1 символи.
  4. Базата данни съхранява знаците æ¼¢å­ (знаците, които E6 BC A2 E5 AD 97 съпоставя на latin1 ).
  5. Същият процес, обърнат, кара PHP да получава същите байтове, които след това третира като UTF-8. Обръщането работи добре за PHP, въпреки че базата данни не третира знаците както трябва.

Така че проблемът тук беше, че връзката към базата данни беше зададена неправилно, когато данните бяха въведени в базата данни. Ще трябва да преобразувате данните в базата данни в правилните знаци. Опитайте това:

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

Може би utf8 не е това, от което се нуждаете тук, експериментирайте. Ако това работи, променете това в UPDATE изявление за постоянно актуализиране на данните.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да извършите търсене, чувствително към акцента в MySql

  2. Как правилно да напишете UTF-8 низове в MySQL чрез JDBC интерфейс

  3. Как да наблюдавате метриките на HAProxy с ClusterControl

  4. Актуализирайте реда с данни от друг ред в същата таблица

  5. MySQL:ALTER IGNORE TABLE ADD UNIQUE, какво ще бъде съкратено?