我在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字符编码问题?
答案 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,这很好。