无法将ñ字符插入Oracle数据库

时间:2017-03-20 14:01:28

标签: oracle encoding

我在将一个问题插入到Oracle数据库时遇到了问题。

INSERT操作成功完成。 但是,当我选择SELECT时,我得到的是n而不是ñ。

另外,我注意到执行:

select 'ñ' from dual;

给我'n'。

select * from nls_database_parameters where parameter='NLS_CHARACTERSET';

给我'EE8MSWIN1250'。

如何插入ñ? 我想避免修改数据库设置。

我完成这项工作的唯一方法是:

  1. 使用windows-1250编码
  2. 读取输入的.csv文件
  3. 将编码更改为unicode
  4. 将字符串更改为unicode代码表示(其中ñ为\ 00d1)
  5. 执行INSERT / UPDATE将值从#3传递到UNISTR函数
  6. 当然,有一种更简单的方法可以实现这一目标。

3 个答案:

答案 0 :(得分:2)

数据库字符集是否支持该字符? 我在这里找不到那个角色:https://en.wikipedia.org/wiki/Windows-1250

在我的数据库中插入字符集WE8MSWIN1252时,我没有遇到任何问题。 https://en.wikipedia.org/wiki/Windows-1252

答案 1 :(得分:2)

最简单的方法是,使用ASCII找出角色的ASCII(),然后插入使用CHR()转换回字符串。

<强> SQL:

select ascii('ñ'),chr(50097) from dual;

<强>输出:

ASCII('Ñ') CHR(50097)
---------- ----------
     50097 ñ     

您用于连接数据库事务的客户端。有些客户,不要支持这些角色。

答案 2 :(得分:2)

在开始SQL * Plus之前,您必须相应地设置代码页(使用chcp命令)和NLS_LANG环境参数:

chcp 1250
set NLS_LANG=.EE8MSWIN1250
sqlplus ...

但是,正如评论中已经提到的,Windows 1250不支持字符ñ。所以,这些价值观是行不通的。

不必将这些值设置为等于您的数据库字符集,但是代码页和NLS_LANG必须匹配,即后续的值也应该正常工作(因为它们都支持ñ

chcp 1252
set NLS_LANG=.WE8MSWIN1252
sqlplus ...

chcp 850
set NLS_LANG=.WE8PC850
sqlplus ...

同样,EE8MSWIN1250不支持字符ñ,除非您的列的数据类型为NVARCHAR2(分别为NCLOB),否则无法将ñ存储在数据库。