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

Как да избегнете символи за боклук/боклук, докато четете данни от множество езици?

Гуджарати започва રેલવે , правилно? И маляламът започва നേപ , правилно? И англичаните трябваше да включват Bureau’s .

Това е класическият случай на

  • Байтовете, които имате в клиента, са правилно кодирани в utf8. (Bureau е кодиран в подмножеството Ascii/latin1 на utf8; но не е апострофът на ascii.)
  • Свързахте се с SET NAMES latin1 (или set_charset('latin1') или ...), вероятно по подразбиране. (Трябваше да е utf8 .)
  • Колоната в таблицата е декларирана CHARACTER SET latin1 . (Или е възможно да е наследен от таблицата/базата данни.) (Трябваше да е utf8 .)

Корекцията за даннитета е "2-стъпка ALTER".

ALTER TABLE Tbl MODIFY COLUMN col VARBINARY(...) ...;
ALTER TABLE Tbl MODIFY COLUMN col VARCHAR(...) ... CHARACTER SET utf8 ...;

където дължините са достатъчно големи, а другият "..." има каквото и да е друго (NOT NULL и т.н.) вече беше в колоната.

За съжаление, ако имате много колони, с които да работите, ще са необходими много ALTER. Можете (трябва) да MODIFY всички необходими колони към VARBINARY за една таблица в двойка ALTERs .

Корекцията на кодата е да се установи utf8 като връзка; това зависи от API, използван в PHP. ALTERs ще промени дефиницията на колоната.

Редактиране

Имате VARCHAR с грешен CHARACTER SET . Следователно виждате Mojibake като રેલ . Повечето техники за преобразуване се опитват да запазят રેલ , но това не е това, от което се нуждаете. Вместо това предприемете стъпка към VARBINARY запазва битовете, като игнорира старата дефиниция на битовете, представляващи символи, кодирани с latin1. Втората стъпка отново запазва битовете, но сега твърди, че представляват utf8 символи.




  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 4.1+ чрез старо удостоверяване

  2. Относно курсора и итератора на mysql

  3. Заявките за актуализиране на mysql имат ли полза от индекс?

  4. Получаване на java.sql.SQLException:Операцията не е разрешена след затваряне на ResultSet

  5. docker-compose:повторно инициализиране на MySQL db всеки път