如何在 oracle 11g 中插入印度卢比符号?

eat*_*ode 5 oracle insert oracle11g

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

我试过了:

insert into currency(name, symbol) values ('rupee', unistr('\20B9'));
Run Code Online (Sandbox Code Playgroud)

但它不工作。

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

在这里你可以看到

SELECT chr(14844601) FROM dual;
Run Code Online (Sandbox Code Playgroud)

Thi*_*Jet 4

看来您只需要更改 SQL Developer 中的字体即可。检查这个 SQLFiddle

\n\n

您的问题文本中有两件事是错误的:要从其代码nchr()函数中获取 unicode 符号,必须使用而不是chr()。其次,\'\xe2\x82\xb9\'常量字符串被视为varchar2并且要正确指定nvarchar2常量,您必须在此文字前面添加NN\'\xe2\x82\xb9\': 。

\n\n

要更改字体只需打开Tools -> Preferences ...菜单

\n\n

在此输入图像描述

\n\n

并选择Code Editor -> Fonts节点。在此页面,您可以从下拉列表中选择字体Font Name。将卢比符号复制并粘贴到Sample Text字段中,以快速查看字体是否可接受。\nArial(在 win7 上)对我来说效果很好:

\n\n

在此输入图像描述

\n\n

此设置更改网格字体以及代码编辑器中的字体:

\n\n

在此输入图像描述

\n\n

上述操作使您只完成了获得完整卢比符号支持的一半,因为select N\'\xe2\x82\xb9\' from dual只会返回问号。这是因为客户端和服务器端之间完成了查询文本编码转换。
\n为了处理这个问题Oracle提供了ORA_NCHAR_LITERAL_REPLACE环境设置。此设置引导客户端 API 分析查询文本中以 为前缀的字符常量N,并在将查询文本传输到服务器之前使用特殊的内部格式在客户端对此类数据进行编码。不幸的是,SQL Developer 使用 Thin JDBC API,它会忽略此环境设置,因此添加此环境变量并不能解决问题。

\n\n

但是还有另一种方法oracle.jdbc.convertNcharLiterals可以通过作用于系统和连接级别的属性来启用相同的行为。
\n要打开此属性,请在 SQL Developer 安装文件夹的目录ide.conf中找到文件sqldeveloper\\ide\\bin,并将此行添加到文件末尾:

\n\n
AddVMOption -Doracle.jdbc.convertNcharLiterals=true\n
Run Code Online (Sandbox Code Playgroud)\n\n

保存文件并重新启动 SQL Developer,现在一切都必须正常工作:

\n\n

在此输入图像描述

\n\n

PS 说明基于 SQL Developer 3.2 版,旧版本可能有另一个配置文件位置。例如sqldeveloper\\bin\\sqldeveloper.conf

\n