我正在尝试将中文符号粘贴到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
结果字段中包含:'©§englishпепелац?'。没有中国符号。
但如果我手工粘贴'百'符号(在PL / SQL Developer中打开my_table进行编辑,将值粘贴到单元格并提交),它就可以了,db返回:'©§englishпепелац百'
我尝试将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;
帮助ヽ(°□°)ノ
答案 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
设置。