跟我们一起
玩转路由器

Oracle字符集检查和修改

在部署oracle数据库重构版测试环境时,若未正确设置数据库字符集,可能导致后续脚本执行中文乱码。最终解决方案是清除所有数据,修改字符集,并重启数据库。

1、Oracle字符集概述

系统或程序运行的环境通常称为locale。设置数据库locale的最简单方法是通过设置NLS_LANG环境参数。在Linux中,NLS_LANG是环境变量;在Windows中,NLS_LANG存储在注册表中。NLS_LANG由三部分组成:语言(language)、区域(territory)和字符集(character set),格式如下:

常见的设置有:

和。

NLS_LANG的作用是设置客户端应用程序和数据库服务器使用的语言和区域,并设置客户端的字符集。如果客户端字符集与NLS_LANG中的charset不匹配,会导致乱码。

2、检查Oracle Server字符集

检查Oracle Server字符集的常用方法有两种:

▶查询nls_database_parameters

▶使用userenv函数

userenv函数返回当前会话(session)的相关信息。以下SQL语句可以查询当前会话连接的数据库字符集:

有关

的返回值,详见官网介绍:

返回的是当前会话使用的language和territory。characterset是数据库的字符集。

userenv函数的具体使用和当前会话字符集的取值详见以下链接:

oracle的userenv和nls_lang详解

3、修改Oracle Server字符集

一旦数据库创建后,理论上数据库的字符集是不能改变的。因此,在设计和安装之初,选择字符集非常重要。根据Oracle的官方说明,字符集的转换仅支持从子集到超集,反之则不支持。如果两种字符集之间不存在子集和超集关系,Oracle不支持字符集转换。对数据库server而言,错误的修改字符集可能导致严重后果,影响数据库的正常运行。因此,除非万不得已,不建议修改Oracle数据库server端的字符集。

以下是修改server端字符集的方法(不建议使用):

具体使用方法参见:oracle服务器和客户端字符集的查看和修改

4、检查Oracle Client字符集

在Windows上查看NLS_LANG:

在Linux上查看NLS_LANG:

5、修改Oracle Client字符集

修改客户端字符集只需更改上述检查结果中的NLS_LANG即可。

6、整理补充

▶数据库字符集

以上两种方法取得的都是数据库字符集,来源于props$,表示数据库的字符集。

▶实例字符集

主要涉及NLS_LANGUAGE、NLS_TERRITORY的值。NLS_INSTANCE_PARAMETERS来源于v$parameter。

▶会话字符集

来源于v$nls_parameters,表示会话自己的设置,可能是会话的环境变量或者是通过alter session完成。如果会话没有特殊设置,将与nls_instance_parameters一致。详见Oracle官网:NLS Database Parameters

赞(0)
版权声明:本文采用知识共享 署名4.0国际许可协议 [BY-NC-SA] 进行授权
文章名称:《Oracle字符集检查和修改》
文章链接:https://www.lu-you.com/settings/29881.html
本站资源来源于互联网整理,若有图片影像侵权,联系邮箱429682998@qq.com删除,谢谢。

评论 抢沙发

登录

找回密码

注册