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

Cara mendeteksi karakter UTF-8 dalam kolom yang disandikan Latin1 - MySQL

Encoding karakter, seperti zona waktu, adalah sumber masalah yang konstan.

Yang dapat Anda lakukan adalah mencari karakter "ASCII tinggi" karena ini adalah karakter atau simbol beraksen LATIN1, atau yang pertama dari karakter multi-byte UTF-8. Mengatakan perbedaan tidak akan mudah kecuali Anda sedikit curang.

Untuk mengetahui pengkodean apa yang benar, Anda cukup SELECT dua versi yang berbeda dan membandingkan secara visual. Ini contohnya:

SELECT CONVERT(CONVERT(name USING BINARY) USING latin1) AS latin1, 
       CONVERT(CONVERT(name USING BINARY) USING utf8) AS utf8 
FROM users 
WHERE CONVERT(name USING BINARY) RLIKE CONCAT('[', UNHEX('80'), '-', UNHEX('FF'), ']')

Ini dibuat sangat rumit karena mesin regexp MySQL tampaknya mengabaikan hal-hal seperti \x80 dan membuatnya perlu menggunakan UNHEX() sebagai gantinya.

Ini menghasilkan hasil seperti ini:

latin1                utf8
----------------------------------------
Björn                Björn


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana cara mengekspor database mysql menggunakan Command Prompt?

  2. Pratinjau dan unggah gambar menggunakan database PHP dan MySQL

  3. Lewati array ke rutinitas tersimpan MySQL

  4. Skrip Bash untuk memasukkan nilai di MySQL

  5. kata sandi root mysql lupa