当我的关键字段包含mu('μ')字符时,如何检索Oracle记录?

时间:2009-09-04 21:29:43

标签: sql oracle plsql character-encoding oracle10g

我在Oracle(10.2.0.4)中有一个小的测量单位表。它被定义为

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

它填充了一些记录,其中一条记录的单位值为“μL”。当我尝试使用此查询查询该记录时...

select * from units where unit = 'μL'

..我得到一个空的结果。我尝试在SQL Developer中使用直接SQL,也使用ODBC参数,两种情况都没有给我任何帮助。但是,我可以成功检索任何没有这种mu字符的单位。那么,我怎样才能成功检索这些记录?是不是我不知道的一些Oracle字符编码问题?

3 个答案:

答案 0 :(得分:2)

这是一个编码问题,任何在表中插入此字符所使用的编码都与查询使用的编码不同。

您可以使用ASCII函数检查两种编码是否相同:

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

这将显示每个单元中第一个字符的代码。

然后,您可以在以下位置检查运行查询的环境中的编码:

SELECT ASCII('µ') FROM dual;

如果它们不一样,那就是你的问题。

答案 1 :(得分:2)

另一种解释来自于Unicode具有 2 代码点mu:u00b5(其用作单个“micro”的缩写)和u03bc(它适用于希腊语文本)。在大多数字体中,它们的外观相同。

答案 2 :(得分:0)

确保您的连接具有与数据库表/列相同的编码集。 您的源代码具有哪种编码?如果你使用java或.net语言,很可能是utf8,这很好。