Sur la base de la bonne réponse, mais en tenant également compte des caractères de contrôle ASCII, la solution qui a fonctionné pour moi est la suivante:
SELECT * FROM `table` WHERE NOT `field` REGEXP "[\\x00-\\xFF]|^$";
Il fait la même chose: recherche les violations de la plage ASCII dans une colonne, mais vous permet également de rechercher des caractères de contrôle, car il utilise la notation hexadécimale pour les points de code. Comme il n'y a pas de comparaison ou de conversion (contrairement à la réponse de @ Ollie), cela devrait également être beaucoup plus rapide. (Surtout si MySQL effectue une résiliation anticipée de la requête regex, ce qu'il devrait certainement.)
Cela évite également de renvoyer des champs de longueur nulle. Si vous voulez une version légèrement plus longue qui pourrait fonctionner mieux, vous pouvez utiliser ceci à la place:
SELECT * FROM `table` WHERE `field` <> "" AND NOT `field` REGEXP "[\\x00-\\xFF]";
Il effectue une vérification séparée de la longueur pour éviter les résultats de longueur nulle, sans les considérer pour une passe d'expression régulière. Selon le nombre d'entrées de longueur nulle que vous avez, cela pourrait être beaucoup plus rapide.
Notez que si votre jeu de caractères par défaut est quelque chose de bizarre où 0x00-0xFF ne correspond pas aux mêmes valeurs que ASCII (existe-t-il un tel jeu de caractères quelque part?), Cela renverrait un faux positif. Sinon, profitez-en!