Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Jak uniknąć niepotrzebnych/śmieciowych znaków podczas odczytywania danych z wielu języków?

Gudżarati zaczyna રેલવે , prawidłowy? A maljalam zaczyna നേപ , prawidłowy? A angielski powinien był zawierać Bureau’s .

To klasyczny przypadek

  • Bajty, które masz w kliencie, są poprawnie zakodowane w utf8. (Bureau jest zakodowany w podzbiorze Ascii/latin1 utf8; ale nie jest apostrofem ascii.)
  • Połączyłeś się z SET NAMES latin1 (lub set_charset('latin1') lub ...), prawdopodobnie domyślnie. (Powinien to być utf8 .)
  • Kolumna w tabeli została zadeklarowana jako CHARACTER SET latin1 . (Lub prawdopodobnie został odziedziczony z tabeli/bazy danych.) (Powinno to być utf8 .)

Poprawka danych to „dwuetapowa zmiana”.

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

gdzie długości są wystarczająco duże, a pozostałe „...” mają cokolwiek innego (NOT NULL , itp) był już na kolumnie.

Niestety, jeśli masz dużo kolumn do pracy, zajmie to wiele ALTERów. Możesz (powinieneś) MODIFY wszystkie niezbędne kolumny do VARBINARY dla jednej tabeli w parze ALTERs .

Poprawka kodu jest ustanowienie utf8 jako połączenia; zależy to od interfejsu API używanego w PHP. ALTERs zmieni definicję kolumny.

Edytuj

Masz VARCHAR z niewłaściwym CHARACTER SET . Dlatego widzisz Mojibake jak રેલ . Większość technik konwersji stara się zachować રેલ , ale to nie jest to, czego potrzebujesz. Zamiast tego zrób krok do VARBINARY zachowuje bity, ignorując starą definicję bitów reprezentujących znaki zakodowane w języku łacińskim1. Drugi krok ponownie zachowuje bity, ale teraz twierdzi, że reprezentują one znaki 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. CakePHP - pobierz ostatnie uruchomienie zapytania

  2. MIN() – Znajdź minimalną wartość w kolumnie w MySQL

  3. Kolumna Mysql Średnia w czasie?

  4. Jak zoptymalizować widoki MySQL

  5. Błąd składni wyszukiwania i zamiany MySQL