2014-09-23 49 views
0

我有它的传统中国字符串表,存储在NVARCHAR2(100)领域 - 例如如何在SQL Developer的查询的WHERE子句中使用unicode?

一定会

表已经从一个逗号分隔的文本文件,通过导入对话被加载在SQL Developer中。

如果我运行

SELECT column1 
FROM table1; 

我可以看到

一定会

在结果

但是,如果我尝试

SELECT column1 
FROM table1 
WHERE column1 = '一定會'; 

我得到零行。我看过http://docs.oracle.com/cd/B19306_01/server.102/b14225/ch7progrunicode.htm,但没有看到任何解释。

SELECT column1 
FROM table1 
WHERE column1 = N'一定會'; 

回报什么,而且也不

SELECT column1 
FROM table1 
WHERE column1 = TO_NCHAR('一定會'); 

我需要换行字符串的函数来告诉Oracle解释Unicode作为......嗯,Unicode的?

+0

您是否阅读过您链接的内容? * TO_NCHAR函数在运行时转换数据,而N函数在编译时转换数据。 'INSERT INTO customers VALUES(1000, TO_NCHAR('John Smith'),N'500 Oracle Parkway',sysdate);'* – 2014-09-23 08:13:50

+0

是的,但是既不添加TO_NCHAR也不添加N。我会修改这个问题来反映这一点。谢谢 – JamesF 2014-09-23 08:21:01

回答

1

通常,你需要把上N第一分隔符之前告诉通信协议以下字符为Unicode,因此必须不被翻译/解释/转换等。例如:

Where column1 = N'一定會' 

您不能在N和'

之间放置任何空格
+0

谢谢。我试过了,它仍然没有结果。 – JamesF 2014-09-23 08:15:12

+0

然后可能是因为column1不是nchar类型,nvarchar或ntext类型。此外,它正确显示的事实并不意味着它被正确存储,因为写入错误通常会被读取中的相同类型的错误纠正。例如,您可以使用正确或错误的编码方案将此字符串存储在varchar字段中,但在仍能正确显示的情况下,您将无法对其进行搜索。 – SylvainL 2014-09-23 08:19:14

+0

column1是nvarchar2(100) - 是nvarchar的子类型,还是你的解决方案不适用? – JamesF 2014-09-23 08:24:39