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

Pao*_*sco 4 oracle types

我创建了一个带有索引varchar2列的Oracle表,称为"ID".
我正在使用的软件正在读取此表,但不是运行像这样的查询

select * from table_name where ID='something'
Run Code Online (Sandbox Code Playgroud)

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

select * from table_name where ID=N'something'
Run Code Online (Sandbox Code Playgroud)

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

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

Vin*_*rat 13

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

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

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