Dựa trên câu trả lời đúng, nhưng cũng tính đến các ký tự điều khiển ASCII, giải pháp hiệu quả với tôi là:
SELECT * FROM `table` WHERE NOT `field` REGEXP "[\\x00-\\xFF]|^$";
Nó cũng làm điều tương tự: tìm kiếm các vi phạm phạm vi ASCII trong một cột, nhưng cũng cho phép bạn tìm kiếm các ký tự điều khiển, vì nó sử dụng ký hiệu thập lục phân cho các điểm mã. Vì không có so sánh hoặc chuyển đổi (không giống như câu trả lời của @ Ollie), nên điều này cũng nhanh hơn đáng kể. (Đặc biệt là nếu MySQL không kết thúc sớm trên truy vấn regex, điều này chắc chắn nên.)
Nó cũng tránh các trường trả về có độ dài bằng không. Nếu bạn muốn một phiên bản dài hơn một chút có thể hoạt động tốt hơn, bạn có thể sử dụng phiên bản này thay thế:
SELECT * FROM `table` WHERE `field` <> "" AND NOT `field` REGEXP "[\\x00-\\xFF]";
Nó thực hiện một kiểm tra riêng về độ dài để tránh kết quả có độ dài bằng không, mà không xem xét chúng cho vượt qua regex. Tùy thuộc vào số lượng mục nhập có độ dài bằng không bạn có, mục này có thể nhanh hơn đáng kể.
Lưu ý rằng nếu bộ ký tự mặc định của bạn là thứ gì đó kỳ quái trong đó 0x00-0xFF không ánh xạ tới các giá trị giống như ASCII (có một bộ ký tự như vậy tồn tại ở bất cứ đâu không?), Điều này sẽ trả về kết quả dương tính giả. Nếu không, hãy tận hưởng!