5

我想在 oracle 11g 中插入印度卢比符号。

我努力了:

insert into currency(name, symbol) values ('rupee', unistr('\20B9'));

但它不工作。

SELECT ascii('₹') FROM dual;它为卢比符号提供 ascii 值,但插入后它在行中显示框。

在这里你可以看到

SELECT chr(14844601) FROM dual;
4

1 回答 1

4

似乎您只需要在 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

于 2013-08-12T23:57:44.417 回答