Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Bagaimana cara menghindari karakter Sampah/sampah saat membaca data dari berbagai bahasa?

Bahasa Gujarati memulai રેલવે , benar? Dan Malayalam memulai നേപ , benar? Dan bahasa Inggris seharusnya menyertakan Bureau’s .

Ini adalah kasus klasik

  • Byte yang Anda miliki di klien dikodekan dengan benar di utf8. (Bureau dikodekan dalam subset Ascii/latin1 dari utf8; tapi bukan apostrof ascii.)
  • Anda terhubung dengan SET NAMES latin1 (atau set_charset('latin1') atau ...), mungkin secara default. (Seharusnya utf8 .)
  • Kolom pada tabel dideklarasikan CHARACTER SET latin1 . (Atau mungkin itu diwarisi dari tabel/database.) (Seharusnya utf8 .)

Perbaikan untuk data adalah "ALTER 2 langkah".

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

di mana panjangnya cukup besar dan "..." lainnya memiliki apa pun (NOT NULL , dll) sudah ada di kolom.

Sayangnya, jika Anda memiliki banyak kolom untuk dikerjakan, dibutuhkan banyak ALTER. Anda dapat (harus) MODIFY semua kolom yang diperlukan untuk VARBINARY untuk satu tabel dalam sepasang ALTERs .

Perbaikan untuk kode adalah menetapkan utf8 sebagai koneksi; ini tergantung pada api yang digunakan dalam PHP. ALTERs akan mengubah definisi kolom.

Sunting

Anda memiliki VARCHAR dengan CHARACTER SET yang salah . Karenanya, Anda melihat Mojibake seperti રેલ . Sebagian besar teknik konversi mencoba mempertahankan રેલ , tapi bukan itu yang Anda butuhkan. Sebagai gantinya, ambil langkah ke VARBINARY mempertahankan bit sambil mengabaikan definisi lama bit yang mewakili karakter yang disandikan latin1. Langkah kedua lagi mempertahankan bit, tetapi sekarang mengklaim bahwa mereka mewakili karakter 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. Buat kueri mysql dinamis menggunakan variabel php

  2. Hitung semua record yang tidak ada ke tabel lain - SQL Query

  3. generator mybatis Pola nama kolom tidak boleh NULL atau kosong

  4. MySQL JOIN Penyalahgunaan? Seberapa buruk itu bisa terjadi?

  5. Bagaimana cara menanyakan banyak ke banyak hubungan sekuel?