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
utf8mb4bukannyautf8.
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.