暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

ORACLE11g数据库字符集从ZHS16GBK转为UTF8

oracle学习笔记 2019-01-25
1684

数据库字符集直接查看方法:

select * fromnls_database_parameters;

select * fromv$nls_parameters;

找到 NLS_LANGUAGE_NLS_TERRITORY_NLS_CHARACTERSET


环境变量nls_lang便是由这三部分组成

NLS_LANG = language_territory.charset

比如:NLS_LANG = SIMPLIFIEDCHINESE_CHINA.UTF8


客户终端字符集查看方法:

32位在:

HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432NODE\ORACLE\KEY_OraDb11g_home1\NLS_LANG

64位在:

HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\KEY_OraDb11g_home1\NLS_LANG


操作:

将ORACLE11g数据库字符集从ZHS16GBK转为UTF8(或AL32UTF8也可以)

步骤一:执行以下命令

sqlplus "/as sysdba"


conn as sysdba;


shutdown immediate;


startup mount;


ALTER SYSTEM ENABLE RESTRICTED SESSION;


ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;


ALTER SYSTEM SET AQ_TM_PROCESSES=0;


alter database open;


alter database character set UTF8;


shutdown immediate;


startup;


步骤二:执行完毕后,设置客户端字符集:


32位在:

HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432NODE\ORACLE\KEY_OraDb11g_home1\NLS_LANG


64位在:

HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\KEY_OraDb11g_home1\NLS_LANG


按照上述路径找到后设置NLS_LANG的值为SIMPLIFIED CHINESE_CHINA.UTF8


步骤三:最后再设置环境变量NLS_LANG的值为SIMPLIFIED CHINESE_CHINA.UTF8重启电脑即可,然后执行utf8编码的sql脚本不再出现乱码。

总结:



如果“NLS_LANG”等于“数据库字符集”时,不需要进行任何转换,直接把字符插入数据库


如果“NLS_LANG”不等于“数据库字符集”,则需要进行转换,乱码的根源就在这里。



如果“NLS_LANG”编码跟sql脚本一致,则插入数据库的数据基本不会乱码,但是有可能会导致sqlplus中文提示乱码。


如果“NLS_LANG”编码跟sql脚本不一致,和系统一直,则插入数据库的数据可能会乱码,sqlplus中文提示不乱码。

本文分享自微信公众号 - oracle学习笔记,如有侵权,请联系 service001@enmotech.com 删除。
最后修改时间:2019-12-17 11:03:47
文章转载自oracle学习笔记,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论