Oracle:使用'N'函数查询 - 我应该使用哪种数据类型?

时间:2010-12-17 13:07:04

标签: oracle types

我创建了一个带有索引varchar2列的Oracle表,称为“ID” 我正在使用的软件正在阅读此表,但不是运行像

这样的查询
select * from table_name where ID='something'

它确实(注意值之前的额外“N”)

select * from table_name where ID=N'something'

导致某种字符转换。
问题是,当第一个查询执行范围扫描时,第二个查询正在执行全表扫描。

由于我无法修改此软件运行的查询,我应该使用哪种数据类型而不是varchar2,以便“N”函数执行的转换不意味着全表扫描?

1 个答案:

答案 0 :(得分:13)

字符串前面的前缀N用于指定NVARCHAR2或NCHAR数据类型。

将NVARCHAR2与VARCHAR2进行比较时,Oracle会将VARCHAR2变量转换为NVARCHAR2。这就是您正在经历全面扫描的原因。

如果无法修改查询,请在表格中使用NVARCHAR2列而不是VARCHAR2。