Bonjour,
Je cherche à savoir si certains champs de ma base de données contiennent des caractères spéciaux non-latins mais UTF-8. Donc du russe ou du chinois par exemple, et sans récuperer les caractères spéciaux scandinaves / slaves / francais majuscule accentué / etc...
Pour l'instant j'utilise la requete suivante qui me permet de detecter tout les caractères spéciaux en dehors de la liste suivante:
0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz*-/().''&`,@"+:>!;%$#?^=/.|\{}_[]
SELECT * FROM table WHERE LENGTH(TRIM(TRANSLATE( champs ,' ','0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz*-/().''&`,@"+:>!;%$#?^=/.|\{}_[]'))) > 0 with ur;
A noter que le 2eme champs du translate est mal retranscrit sur le site (ou je m'y prends mal). Il y a autant d'espaces que de caractères en fait pour spécifier par quoi remplacer chaque caractère trouver dans le 3eme champs.
Si je passe la requete je récupère donc des enregistrement qui ont par exemple pour valeur: "LÈVY" mais que je souhaiterais éliminer.
Sauf que quand j'insère le "È" dans ma requete, elle plante:
SELECT * FROM table WHERE LENGTH(TRIM(TRANSLATE( champs ,' ','0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz*-/().''&`,@"+:>!;%$#?^=/.|\{}_[]È'))) > 0 with ur;
SQL0103N The numeric literal
"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" is not valid.
SQLSTATE=42604
Est ce qu'il est possible avec TRANSLATE de remplacer aussi ce type de caractère qui est sur 2 octets par du space?
Faut il que je change la representation du "È" (concatenation de la chaine avec la représentation hexadécimale?)?
Ou fait je completement fausse route et il faut que j'utilise une autre méthode?
Merci.
Partager