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