2010-06-06 5 views
1

J'ai cette requête (qui fonctionne sur la base de données Oracle 10g):arabe requête SQL (Oracle DB) renvoie un résultat vide

SELECT ge.*, ge.concept AS glossarypivot 
FROM s_glossary_entries ge 
WHERE (ge.glossaryid = '161' OR ge.sourceglossaryid = '161') 
AND (ge.approved != 0 OR ge.userid = 361) 
AND concept like 'م%' ORDER BY ge.concept 

La requête doit afficher tous les mots qui commencent par la lettre arabe « م » mais malheureusement, il renvoie un résultat vide ..

Cependant, si je lance la même requête sur la même base de données qui fonctionne sur MYSQL, il fonctionne bien et affiche le résultat correct ..

et aussi, si je lance la même requête avec une lettre anglaise (m), comme ceci:

SELECT ge.*, ge.concept AS glossarypivot 
FROM s_glossary_entries ge 
WHERE (ge.glossaryid = '161' OR ge.sourceglossaryid = '161') 
AND (ge.approved != 0 OR ge.userid = 361) 
AND concept like 'm%' ORDER BY ge.concept 

il affiche le résultat correctement et non vide !!

Que dois-je faire pour que cette requête fonctionne correctement dans la base de données Oracle 10?

P.S. le jeu de caractères de base de données Oracle est: « AL32UTF8 »

Merci beaucoup à l'avance

Répondre

0

Bien sûr que cela fonctionne dans MySQL? Je ferais cette partie:

AND concept = 'م' 

comme ceci:

AND concept LIKE 'م%' 

ou parce qu'il est arabe et le premier caractère est la bonne est comme ceci:

AND concept LIKE '%م' 

Mais je ne sais pas Si Oracle a même LIKE, je n'ai jamais travaillé avec Oracle.

+0

J'ai édité la requête, je suis désolé pour erreur ... s'il vous plaît jeter un oeil à nouveau sur la question ... oui, cela fonctionne sur mysql ... – JaHelia

+0

Êtes-vous sûr que «م%» est le droit chemin et pas '% م'? Parce que c'est arabe .... – kalkin

0

si je mets un caractère UTF8: « ظ ... » au lieu du caractère arabe « م », il fonctionne sur Oracle ...

0

La question évidente est, avez-vous des données correspondant.

Vous pouvez utiliser SELECT DUMP (concept), DUMP ('م') FROM ... pour voir les octets qui forment réellement la valeur. Ma base de données me donne 217/133. Je crois qu'il y a des caractères qui peuvent avoir des octets différents en UTF-8 mais la même apparence physique, bien que je ne puisse pas dire si c'est l'un d'entre eux.

De plus, consultez le guide Globalization.

0

Je pense qu'il s'agit d'une incohérence dans la page de codes de votre client Oracle. il devrait être défini dans le même jeu de caractères que la base de données, sinon il y aura une conversion de caractères.