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