我想在 oracle 11g 中插入印度卢比符号。
我努力了:
insert into currency(name, symbol) values ('rupee', unistr('\20B9'));
但它不工作。
SELECT ascii('₹') FROM dual;
它为卢比符号提供 ascii 值,但插入后它在行中显示框。
在这里你可以看到
SELECT chr(14844601) FROM dual;
似乎您只需要在 SQL Developer 中更改字体。检查这个 SQLFiddle。
您的问题文本中有两处错误:要从其代码nchr()
函数中获取 unicode 符号,必须使用chr()
. 其次是将'₹'
常量字符串视为varchar2
并且要正确指定nvarchar2
常量,您必须N
在此文字前添加:N'₹'
。
要更改字体,只需打开Tools -> Preferences ...
菜单
并选择Code Editor -> Fonts
节点。Font Name
在此页面,您可以从下拉列表中选择字体。复制卢比符号并将其粘贴到Sample Text
字段中以快速查看字体是否可接受。Arial(在win7上)对我来说很好:
此设置更改网格字体以及代码编辑器中的字体:
上面的操作只让您获得完整的卢比符号支持的一半,因为select N'₹' from dual
只会返回问题符号。这是因为在客户端和服务器端之间完成了查询文本编码转换。
为了处理这个问题,Oracle提供了 ORA_NCHAR_LITERAL_REPLACE 环境设置。此设置指导客户端 API 分析查询文本中以前缀为前缀的字符常量,N
并使用特殊的内部格式在客户端对此类数据进行编码,然后再将查询文本传输到服务器。不幸的是,SQL Developer 使用忽略此环境设置的 Thin JDBC API,因此添加此环境变量并不能解决问题。
但是还有另一种方法oracle.jdbc.convertNcharLiterals
可以使用作用于系统和连接级别的属性来打开相同的行为。
要打开此属性,请在 SQL Developer 安装文件夹ide.conf
的目录中找到文件sqldeveloper\ide\bin
,并将此行添加到文件末尾:
AddVMOption -Doracle.jdbc.convertNcharLiterals=true
保存文件并重新启动 SQL Developer,现在一切都必须正常工作:
PS 说明基于 SQL Developer 版本 3.2,旧版本可能有另一个配置文件位置。例如sqldeveloper\bin\sqldeveloper.conf
。