将中文符号粘贴到oracle DB

时间:2017-12-01 05:12:49

标签: oracle unicode encoding

我正在尝试将中文符号粘贴到oracle DB:

NLS_NCHAR_CHARACTERSET = 'UTF8'
NLS_LANGUAGE = 'RUSSIAN'
NLS_TERRITORY = 'RUSSIA'
NLS_CURRENCY = '?.'
NLS_ISO_CURRENCY = 'RUSSIA'
NLS_NUMERIC_CHARACTERS = '',''
NLS_CHARACTERSET = 'CL8MSWIN1251'
NLS_CALENDAR = 'GREGORIAN'
NLS_DATE_FORMAT = 'DD.MM.RR'
NLS_DATE_LANGUAGE = 'RUSSIAN'
NLS_SORT = 'RUSSIAN'
NLS_TIME_FORMAT = 'HH24:MI:SSXFF'
NLS_TIMESTAMP_FORMAT = 'DD.MM.RR HH24:MI:SSXFF'
NLS_TIME_TZ_FORMAT = 'HH24:MI:SSXFF TZR'
NLS_TIMESTAMP_TZ_FORMAT = 'DD.MM.RR HH24:MI:SSXFF TZR'
NLS_DUAL_CURRENCY = '?.'
NLS_COMP = 'BINARY'
NLS_LENGTH_SEMANTICS = 'BYTE'
NLS_NCHAR_CONV_EXCP = 'FALSE'
NLS_RDBMS_VERSION = '11.2.0.4.0'

查询:

update my_table set message = '© § english пепелац 百' where id = 252615

消息字段类型为NVARCHAR2

结果字段中包含:'©§engl​​ishпепелац?'。没有中国符号。

但如果我手工粘贴'百'符号(在PL / SQL Developer中打开my_table进行编辑,将值粘贴到单元格并提交),它就可以了,db返回:'©§engl​​ishпепелац百'

我尝试将NLS_LANG设置为“.zhs16gbk”,“。AL32UTF8”,“SIMPLIFIED CHINESE_CHINA.ZHS16GBK”等......但是没有帮助。

PL / SQL Developer 10.0.5.1710; Windows 7(64位)6.1 Build 7601(Service Pack 1); oracle客户端11.2.0;

帮助ヽ(°□°)ノ

1 个答案:

答案 0 :(得分:1)

NLS_LANG值设为RUSSIAN_RUSSIA.AL32UTF8(语言和地区由您自己决定,只需确保.AL32UTF8

然后在PL / SQL Developer中转到Configure - >偏好 - >文件 - >格式 - >编码

并设置"始终为UTF8"

使用"始终ANSI"或"自动检测"那么PL / SQL Developer会将SQL脚本保存在ANSI代码页中,很可能是CP1252(见https://www.microsoft.com/resources/msdn/goglobal/default.mspx),它不支持中文字符。

注意,UTF-8是Oracle字符集AL32UTF8。 Oracle字符集UTF8表示CESU-8,略有不同。

不要关心数据库(国家)字符集是CESU-8而客户端字符集是UTF-8,Oracle驱动程序会自动转换 - 这是主要目的NLS_LANG设置。