Основываясь на правильном ответе, но также принимая во внимание управляющие символы 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 (такой набор символов существует где-нибудь?), Это вернет ложный положительный результат. В противном случае наслаждайтесь!