【Oracle】数据库乱码问题的解决
2017-09-17 19:38
501 查看
1,查看服务端的字符集
select userenv(‘language’) from dual;
更详细一点可以用下面的sql方式查看
select * from nls_database_parameters;
2,windows下查看客户端的字符集
查看注册表信息
win+r,输入regedit,打开注册表
HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\KEY_OraDB12Home1下面有一个NLS_LANG项。
linux下是查看环境变量
3,查看dmp文件的字符集
用oracle的exp工具导出的dmp文件也包含了字符集信息,dmp文件的第2和第3个字节记录了dmp文件的字符集。如果dmp文件不大,比如只有几M或几十M,可以用UltraEdit打开(16进制方式),看第2第3个字节的内容,如0354,然后用以下SQL查出它对应的字符集:
SQL> select nls_charset_name(to_number(‘0354’,’xxxx’)) from dual;
ZHS16GBK
直接修改注册表中的NLS_LANG下的字符集设置
2,修改服务端的字符集
ORA-12712: new character set must be a superset of old character set
RROR at line 1:
结果报错,提示新字符集必须是老字符集的超集。
于是强制转换
上面的字符集转换,如果是从子集到父集,需要使用INTERNAL_USE 参数,跳过超子集检测。
那么就需要针对个别情况进行数据的字符集转换,采用函数convert(the string you want to transcode, source_character_set,dest_character_set)
如下面的例子
update table set xzqh=convert(xzqh, ‘ZHS16GBK’, ‘AL32UTF8’)
select userenv(‘language’) from dual;
更详细一点可以用下面的sql方式查看
select * from nls_database_parameters;
2,windows下查看客户端的字符集
查看注册表信息
win+r,输入regedit,打开注册表
HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\KEY_OraDB12Home1下面有一个NLS_LANG项。
linux下是查看环境变量
3,查看dmp文件的字符集
用oracle的exp工具导出的dmp文件也包含了字符集信息,dmp文件的第2和第3个字节记录了dmp文件的字符集。如果dmp文件不大,比如只有几M或几十M,可以用UltraEdit打开(16进制方式),看第2第3个字节的内容,如0354,然后用以下SQL查出它对应的字符集:
SQL> select nls_charset_name(to_number(‘0354’,’xxxx’)) from dual;
ZHS16GBK
怎么修改字符集?
1,修改客户端的字符集直接修改注册表中的NLS_LANG下的字符集设置
2,修改服务端的字符集
cmd-> sqlplus /nolog sql->conn / as sysdba sql->shutdown immediate; sql->startup mount; sql->ALTER SESSION SET SQL_TRACE=TRUE; sql->ALTER SYSTEM ENABLE RESTRICTED SESSION; sql->ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0; sql->ALTER SYSTEM SET AQ_TM_PROCESSES=0; sql->ALTER DATABASE OPEN; sql->alter database character set AL32UTF8;
ORA-12712: new character set must be a superset of old character set
RROR at line 1:
结果报错,提示新字符集必须是老字符集的超集。
于是强制转换
sql->ALTER DATABASE character set INTERNAL_USE AL32UTF8; sql->shutdown immediate; sql->STARTUP;
上面的字符集转换,如果是从子集到父集,需要使用INTERNAL_USE 参数,跳过超子集检测。
部分表格的乱码问题
针对数据库中的部分表,因为可能导入时候出现编码不符,导致乱码。那么就需要针对个别情况进行数据的字符集转换,采用函数convert(the string you want to transcode, source_character_set,dest_character_set)
如下面的例子
update table set xzqh=convert(xzqh, ‘ZHS16GBK’, ‘AL32UTF8’)
相关文章推荐
- python 链接 ORACLE 数据库,并打印数据.解决中文乱码问题
- [Database] Oracle: Oracle 9i 数据库乱码(字符集)问题解决方案
- 解决Linux下Oracle 10g数据库em,dbca中文方块乱码问题
- python 链接 ORACLE 数据库,并打印数据.解决中文乱码问题
- Oracle 10g Express Edition(XE) 转至数据库主页中文乱码问题的解决
- red hat下使用oracle instant client的occi接口读写数据库中文乱码问题
- 数据库之-------Mysql(JDBC实现&解决存储乱码问题)
- oracle 远程访问数据库 ORA-01034和ORA-27101问题的一种解决方法
- linux oracle中文乱码问题解决方法
- 数据库中出现中文乱码问题解决方法
- oracle 数据导入 数据和备注(comment)乱码问题解决办法
- 数据库中文乱码问题解决
- Orcale 数据库客户端PL/SQL 中文乱码的问题解决方法
- oracle em命令行配置及界面按钮乱码问题解决方法
- oracle 字符集乱码解决 详细解释了oracle字符集的问题
- 关于ORACLE 11g数据库不能导出空表问题解决
- Oracle汉字乱码问题原因及解决方法
- 解决GBK数据库文件通过source导入mysql数据库乱码的问题
- Oracle数据库之使用sqlplus执行sql脚本乱码解决办法
- oracle中的数据库乱码的原因与解决