En se basant sur 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 : il recherche les violations de la plage ASCII dans une colonne, mais vous permet également de rechercher les caractères de contrôle, car il utilise la notation hexadécimale pour les points de code. Puisqu'il n'y a pas de comparaison ou de conversion (contrairement à la réponse de @Ollie), cette méthode devrait également être beaucoup plus rapide. (Surtout si MySQL effectue une terminaison anticipée sur la requête regex, ce qu'il devrait certainement faire).
Elle évite également de renvoyer des champs de longueur nulle. Si vous souhaitez une version légèrement plus longue et plus performante, vous pouvez utiliser cette option :
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 prendre en compte pour une passe de regex. 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 correspondent pas aux mêmes valeurs que l'ASCII (existe-t-il un tel jeu de caractères ?), cela renverra un faux positif. Sinon, profitez-en !
8 votes
Ollie Jones a une bien meilleure réponse (voir en bas de page).
1 votes
@JonathanArkell Plus en bas maintenant :)
0 votes
Correction vérifiez le milieu ! ;)
0 votes
C'est la réponse dont parle @Jonathan. stackoverflow.com/a/11741314/792066