如何查看Oracle数据库的字符编码

如何查看Oracle数据库的字符编码,第1张

1、SELECTvalue$FROMsys.props$WHEREname='NLS_CHARACTERSET'

--查询oracle相关参数

2、SELECT*FROMNLS_DATABASE_PARAMETERS

扩展资料:

OracleDatabase,又名OracleRDBMS,或简称Oracle。是甲骨文公司的一款关系数据管理系统。它是在数据库领域一直处于领先地位的产品。

可以说Oracle数据库系统是目前世界上流行的关系数据库管理系统,系统可移植性好、使用方便、功能强,适用于各类大、中、小、微机环境。它是一种高效率、可靠性好的适应高吞吐量的数据库解决方案。

ORACLE数据库系统是美国ORACLE公司(甲骨文)提供的以分布式数据库为核心的一组软件产品,是目前最流行的客户/服务器(CLIENT/SERVER)或B/S体系结构的数据库之一。

比如SilverStream就是基于数据库的一种中间件。ORACLE数据库是目前世界上使用最为广泛的数据库管理系统,作为一个通用的数据库系统,它具有完整的数据管理功能;作为一个关系数据库,它是一个完备关系的产品;作为分布式数据库它实现了分布式处理功能。

但它的所有知识,只要在一种机型上学习了ORACLE知识,便能在各种类型的机器上使用它。

Oracle数据库最新版本为OracleDatabase12c。Oracle数据库12c 引入了一个新的多承租方架构,使用该架构可轻松部署和管理数据库云。

此外,一些创新特性可最大限度地提高资源使用率和灵活性,如OracleMultitenant可快速整合多个数据库,而AutomaticDataOptimization和HeatMap能以更高的密度压缩数据和对数据分层。

这些独一无二的技术进步再加上在可用性、安全性和大数据支持方面的主要增强,使得Oracle数据库12c 成为私有云和公有云部署的理想平台。

参考资料:Oracle数据库--百度百科

1、首先在电脑上找到并打开PLSQL,弹出登陆界面,进去登陆。

2、然后随便写了一个查询语句,发现显示有乱码。

3、这时先查看oracle服务器端的字符编码是什么。

4、配置一个环境变量就可以解决问题,这时回到电脑桌面,打开计算机属性。

5、然后点击高级系统设置,接着在高级选项卡下点击-环境变量选项。

6、然后点击新建,名称和变量值如下图所示,点击确定。

7、最后加好环境变量之后,关闭PLSQL重新打开,写一个查询就不会再出现问题了。

如何更改Oracle字符集

国内最常用的Oracle字符集ZHS16GBK(GBK 16-bit Simplified Chinese)能够支持繁体中文,并且按照2个字符长度存储一个汉字。UTF8字符集是多字节存储,1个汉字(简体、繁体)有时采用3个字符长度存储。

Oracle支持字符集的更改,但是UTF8是Oracle中最大的字符集,也就是说UTF8是ZHS16GBK的严格超集。

对于子集到超集的转换,Oracle是允许的,但是对于超集到子集的转换是不允许的。一般对于超集到子集的转换,建议是通过dbca删除原来的数据库,重新再建库,选择正确的字符集,然后导入备份。

我的方案是:先备份数据,然后强制转换字符集从UTF8到ZHS16GBK,然后导入备份数据。如果不行,才来重新建库,设置字符集ZHS16GBK,导入备份数据。如果这还不行,就把更改字符集从ZHS16GBK到UTF8(这是安全的),再导入备份数据,恢复到原始状况。这样就有可能避开重新建库的麻烦。

1. 备份数据库中所有用户的数据

以oracle用户登陆,执行以下命令

# export NLS_LANG = “SIMPLIFIED CHINESE_CHINA.UTF8”

保持与数据库服务器端一致,这样在exp导出时,就不会存在字符的转换了,备份最原始的数据。

2. 评估UTF8转换成ZHS16GBK的风险

转换之前,要使用Oracle的csscan工具对数据库扫描,评估字符集转换前后,数据有可能的损坏情况。如果评估情况糟糕,那就绝对要放弃了。

先安装属于 CSMIG 用户的一套表和过程。以oracle用户登陆UNIX,

#sqlplus “/ as sysdab”

SQL>@$ORACLE_HOME/ rdbms/admin/csminst.sql

SQL>exit

# $ORACLE_HOME\bin\csscan -help

可以更清楚如何使用csscan。

# $ORACLE_HOME/bin/csscan system/sunday user=mmsc FROMCHAR=UTF8 TOCHAR=ZHS16GBK ARRAY=102400 PROCESS=3 >csscan.log

以上命令意思是扫描用户:mmsc中的所有数据,从字符集UTF8更改为ZHS16GBK的转换情况。然后得到三个文件:scan.txt、scan.out、scan.err。

查看scan.out,scan.err,可以看出mmsc用户下的所有的数据都是可以转换的,并且没有出现转换“Exceptional”的情况,因此可以更放心一点。

3. 更改数据库的字符集为ZHS16GBK

前面说过,通过命令“Alter Database Characeter Set XXXX”,实现从超集到子集的转换,在Oracle是不允许的。但是该命令,提供这样的命令方式:

Alter Database Character Set INTERNAL_CONVERT/ INTERNAL_USE XXXX

这是Oracle的非公开命令。“在使用这个命令时,Oracle会跳过所有子集及超集的检查,在任意字符集之间进行强制转换,所以,使用这个命令时你必须十分小心,你必须清楚这一操作会带来的风险”。

以oracle用户登陆UNIX,

#sqlplus “/ 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 ZHS16GBK

//如果不使用“INTERNAL_USE”参数,系统会提示出错:

//ERROR at line 1:

//ORA-12712: new character set must be a superset of old character set

SQL>ALTER SESSION SET SQL_TRACE=FALSE

SQL>SHUTDOWN IMMEDIATE

SQL>STARTUP

此时,检查一下数据库的字符集是否更改过来

SQL>select value$ from props$ where name=’NLS_CHARACTERSET’

VALUE$

-----------------

ZHS16GBK

紧接着检查一下数据库中简体中文、繁体中文是否正常,不会出现乱码。

SQL>select spid,spname,spshortname from spinfovisual_hk

…...

非常不幸,我看到了一堆乱码,这也证明了Oracle不支持字符集从超集到子集的更改,当时心里很紧张,很怕失败,从而恢复到原样。

但是根据以前的验证,把UTF8下的备份导入到ZHS16GBK中去,是OK的,所以继续尝试。

4. 导入备份的用户数据

还是以oracle用户登陆UNIX, 先删除库中的用户mmsc:

#sqlplus “/ as sysdba”

SQL>drop user mmsc cascade

SQL>exit

再运行createuser.sql,生成mmsc用户。

然后使用原来的备份文件,导入到mmsc用户中:

注意:先设置NLS_LANG要与当前数据库的一致:ZHS16GBK。这样,导出时用户会话的NLS_LANG为UTF8,与原先的数据库字符集一致;现在为ZHS16GBK,与此时的数据库字符集一致。这样,导入时,就会进行字符转换。

# export NLS_LANG = “SIMPLIFIED CHINESE_CHINA.ZHS16GBK”

#imp mmsc/mmsc@mdspdb file=DSMPD113_user_mmsc.dmp ignore=y fromuser=mmsc touser=mmsc

马上查看数据库中简体、繁体中文,哈哈,没有乱码了,一切显示正常。

紧接着进行验证,也证明了:1个汉字此时只占用2个字符长度。问题解决了!


欢迎分享,转载请注明来源:夏雨云

原文地址:https://www.xiayuyun.com/zonghe/254133.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-15
下一篇2023-04-15

发表评论

登录后才能评论

评论列表(0条)

    保存