Berdasarkan jawaban yang benar, tetapi dengan mempertimbangkan karakter kontrol ASCII juga, solusi yang berhasil untuk saya adalah ini:
SELECT * FROM `table` WHERE NOT `field` REGEXP "[\\x00-\\xFF]|^$";
Itu melakukan hal yang sama: mencari pelanggaran rentang ASCII di kolom, tetapi memungkinkan Anda mencari karakter kontrol juga, karena menggunakan notasi heksadesimal untuk poin kode. Karena tidak ada perbandingan atau konversi (tidak seperti jawaban @ Ollie), ini seharusnya jauh lebih cepat juga. (Terutama jika MySQL melakukan penghentian awal pada kueri regex, yang memang seharusnya dilakukan.)
Ini juga menghindari kembali bidang yang panjangnya nol. Jika Anda menginginkan versi yang sedikit lebih panjang yang mungkin berkinerja lebih baik, Anda dapat menggunakan ini sebagai gantinya:
SELECT * FROM `table` WHERE `field` <> "" AND NOT `field` REGEXP "[\\x00-\\xFF]";
Itu melakukan pemeriksaan terpisah untuk panjang untuk menghindari hasil panjang-nol, tanpa mempertimbangkannya untuk regex pass. Bergantung pada jumlah entri panjang-nol yang Anda miliki, ini bisa jauh lebih cepat.
Perhatikan bahwa jika kumpulan karakter default Anda adalah sesuatu yang aneh di mana 0x00-0xFF tidak dipetakan ke nilai yang sama seperti ASCII (apakah ada kumpulan karakter seperti itu di mana saja?), Ini akan mengembalikan positif palsu. Jika tidak, selamat menikmati!