Основываясь на правильном ответе, но с учетом управляющих символов ASCII, решение, которое сработало для меня, таково:
SELECT * FROM `table` WHERE NOT `field` REGEXP "[\\x00-\\xFF]|^$";
Он делает то же самое: ищет нарушения диапазона ASCII в столбце, но позволяет вам также искать управляющие символы, поскольку он использует шестнадцатеричную нотацию для кодовых точек. Поскольку нет сравнения или преобразования (в отличие от ответа @Ollie), это тоже должно быть значительно быстрее. (Особенно, если MySQL выполняет раннее завершение запроса регулярного выражения, что определенно должно быть.)
Это также позволяет избежать возврата полей нулевой длины. Если вам нужна немного более длинная версия, которая может работать лучше, вы можете использовать вместо этого:
SELECT * FROM `table` WHERE `field` <> "" AND NOT `field` REGEXP "[\\x00-\\xFF]";
Он выполняет отдельную проверку длины, чтобы избежать результатов с нулевой длиной, не учитывая их для прохода регулярного выражения. В зависимости от количества имеющихся записей нулевой длины это может быть значительно быстрее.
Обратите внимание: если ваш набор символов по умолчанию является чем-то странным, где 0x00-0xFF не соответствует тем же значениям, что и ASCII (существует ли где-нибудь такой набор символов?), Это вернет ложное срабатывание. В противном случае наслаждайтесь!