2009-09-04 6 views
0

J'ai une petite table d'unités de mesure dans Oracle (10.2.0.4). Il est défini commeComment puis-je récupérer un enregistrement Oracle lorsque mon champ clé contient un caractère mu ('μ')?

CREATE TABLE Units (
    UNIT_ID number, 
    UNIT varchar2(12) 
) 

Il est peuplé de quelques dossiers, et l'un de ces enregistrements a une valeur unitaire de « ul ». Lorsque j'essaie d'interroger pour cet enregistrement en utilisant cette requête ...

select * from units where unit = 'μL' 

.. Je reçois un résultat vide. J'ai essayé d'utiliser SQL droit dans SQL Developer et aussi avec les paramètres ODBC, et les deux cas ne me donnent rien. Cependant, je peux récupérer n'importe laquelle des unités qui n'ont pas de caractère mu. Alors, comment puis-je récupérer ces enregistrements avec succès? Est-ce un problème d'encodage de caractères Oracle que je ne connais pas?

Répondre

2

Il s'agit vraiment d'un problème de codage et le codage utilisé par tout ce qui est inséré dans la table est différent du codage utilisé par votre requête.

Vous pouvez utiliser les fonctions ASCII pour vérifier que les deux encodages sont les mêmes:

SELECT ASCII(SUBSTR(unit, 1, 1)) FROM units; 

Cela montrera le code du premier caractère de chaque unité.

Ensuite, vous pouvez vérifier l'encodage dans l'environnement que vous exécutez la requête à partir de:

SELECT ASCII('µ') FROM dual; 

S'ils ne sont pas les mêmes, il y a votre problème.

0

Assurez-vous que votre connexion possède le même jeu d'encodage que la table/colonne de la base de données. De quel encodage votre code source dispose-t-il? Si vous utilisez java ou un langage .net, il est probable que ce soit utf8, ce qui sera bien.

2

Une autre explication provient du fait que Unicode a points de code pour mu: u00b5 (qui est destiné à être utilisé comme abréviation de « micro » en unités comme dans votre cas) et u03bc (qui est destiné à utiliser en texte en langue grecque). Dans la plupart des polices, ils sont identiques en apparence.

+0

C'est exactement ce que je vois. Dans la police de messagerie, la différence que j'ai vue était que l'un avait un fond plus plat. Sur l'un de mes dbs, les deux donnaient le même résultat ASCII, mais sur le test db où je voyais initialement cet effet, les résultats ASCII étaient différents. –

Questions connexes