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

Bagaimana cara mendeteksi Karakter Cina di MySQL?

SELECT COUNT(*)
    FROM tbl
    WHERE HEX(col) REGEXP '^(..)*(E[2-9F]|F0A)'

akan menghitung jumlah record dengan karakter Cina di kolom col .

Masalah:

  • Saya tidak yakin rentang hex apa yang mewakili bahasa Mandarin.
  • Ujian mungkin termasuk Korea dan Jepang. ("CJK")
  • Di MySQL, karakter Cina 4-byte membutuhkan utf8mb4 bukannya utf8 .

Elaborasi

Saya berasumsi kolom dalam tabel adalah CHARACTER SET utf8 . Dalam pengkodean utf8, karakter Cina dimulai dengan satu byte antara hex E2 dan E9, atau EF, atau F0. Yang dimulai dengan hex E akan memiliki panjang 3 byte, tetapi saya tidak memeriksa panjangnya; yang F0 akan menjadi 4 byte.

Regexp dimulai dengan ^(..)* , yang berarti "dari awal string (^ ), cari 0 atau lebih (* ) 2 karakter (.. ) nilai. Setelah itu harus berupa E -sesuatu atau F0A . Setelah itu, apapun bisa terjadi. E-something adalah, lebih khusus lagi, E diikuti oleh salah satu dari 2,3,4,5,6,7,8,9, atau F.

Dipilih secara acak, saya melihat bahwa dikodekan sebagai 3 byte hex E88D89 , dan 𠜎 dikodekan sebagai 4 byte hex F0A09C8E .

Saya tidak tahu cara yang lebih baik untuk memeriksa string untuk bahasa tertentu.

Seperti yang Anda temukan, REGEXP bisa jadi agak lambat.

Regexp ini bisa jadi over-kill, karena beberapa karakter non-Cina dapat ditangkap.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Kesalahan (1093):Anda tidak dapat memperbarui tabel target untuk pembaruan di FROM Clause

  2. Cara menginstal mysqlDb untuk MySQL dan Python di Windows

  3. Pernyataan siap multi_query PHP MySQLi

  4. Kelas keamanan di Codeigniter

  5. Wordpress memperbarui tabel mysql