如何查看Oracle数据库字符集,详细操作,xx

如何查看Oracle数据库字符集,详细操作,xx,第1张

数据库服务器字符集select from nls_database_parameters,其来源于props$,是表示数据库的字符集。

  

  客户端字符集环境select from nls_instance_parameters,其来源于v$parameter,

  

  表示客户端的字符集的设置,可能是参数文件,环境变量或者是注册表

  

  会话字符集环境select from nls_session_parameters,其来源于v$nls_parameters,表示会话自己的设置,可能是会话的环境变量或者是alter session完成,如果会话没有特殊的设置,将与nls_instance_parameters一致。

  

  客户端的字符集要求与服务器一致,才能正确显示数据库的非Ascii字符。如果多个设置存在的时候,alter session>环境变量>注册表>参数文件

  

  字符集要求一致,但是语言设置却可以不同,语言设置建议用英文。如字符集是zhs16gbk,则nls_lang可以是American_Americazhs16gbk。

涉及三方面的字符集,

1 oracel server端的字符集;

2 oracle client端的字符集;

3 dmp文件的字符集。

在做数据导入的时候,需要这三个字符集都一致才能正确导入。

21 查询oracle server端的字符集

有很多种方法可以查出oracle server端的字符集,比较直观的查询方法是以下这种:

SQL> select userenv('language') from dual;

USERENV('LANGUAGE')

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

SIMPLIFIED CHINESE_CHINAZHS16GBK

SQL>select userenv(‘language’) from dual;

AMERICAN _ AMERICA ZHS16GBK

22 如何查询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

如果dmp文件很大,比如有2G以上(这也是最常见的情况),用文本编辑器打开很慢或者完全打不开,可以用以下命令(在unix主机上):

cat expdmp |od -x|head -1|awk '{print $2 $3}'|cut -c 3-6

然后用上述SQL也可以得到它对应的字符集。

23 查询oracle client端的字符集

在windows平台下,就是注册表里面相应OracleHome的NLS_LANG。还可以在dos窗口里面自己设置,

比如: set nls_lang=AMERICAN_AMERICAZHS16GBK

这样就只影响这个窗口里面的环境变量。

在unix平台下,就是环境变量NLS_LANG。

$echo $NLS_LANG

AMERICAN_AMERICAZHS16GBK

如果检查的结果发现server端与client端字符集不一致,请统一修改为同server端相同的字符集。

补充:

(1)数据库服务器字符集

select from nls_database_parameters

来源于props$,是表示数据库的字符集。

(2)客户端字符集环境

select from nls_instance_parameters

其来源于v$parameter,表示客户端的字符集的设置,可能是参数文件,环境变量或者是注册表

(3)会话字符集环境

select from nls_session_parameters

来源于v$nls_parameters,表示会话自己的设置,可能是会话的环境变量或者是alter session完成,如果会话没有特殊的设置,将与nls_instance_parameters一致。

(4)客户端的字符集要求与服务器一致,才能正确显示数据库的非Ascii字符。

如果多个设置存在的时候,NLS作用优先级别:Sql function > alter session > 环境变量或注册表> 参数文件> 数据库默认参数

字符集要求一致,但是语言设置却可以不同,语言设置建议用英文。如字符集是zhs16gbk,则nls_lang可以是American_Americazhs16gbk。

一、phpmyadmin设置新建数据库的默认编码为gbk或utf8编码的方法

1先运行show variables like 'character%';查看本mysql的各项charset设置

其中:

character_set_database代表当前所在数据库的编码,这里是gbk

character_set_server代表默认的新建数据库编码,这里是latin1

也就是说,我的当前所在数据库编码是gbk,而如果我新建一个数据库,默认编码是latin1

2根据character_set_database和character_set_server的值,我们就好办了。运行以下两条sql语句,即可设置完毕:

set character_set_server=gbk; //设置默认新建数据库编码为gbk

alter database testdb character set utf8; //更改现有数据库编码

注意:set character_set_server=gbk只对当前连接或者查询有效。如果想新建数据库,请将create database语句写在同一查询中,否则无效

若想永久生效,将character_set_server = gbk写入mysql的配置文件/etc/mycnf即可

二、phpmyadmin导入数据库时gbk或utf8编码的设置(解决导入数据库中文乱码问题)

1首先确保导入的sql文件中的中文不是乱码,此sql文件可以是utf8编码也可以是gb2312编码,都没关系

2在sql文件的最开头添加set names utf8或者gb2312;(必须与你文件的编码相同,如果你想导入后是utf8,你的文件编码就要是utf8,如果你想导入后是gbk/gb2312,你的文件编码就要是gbk/gb2312)。

3通过phpmyadmin导入界面直接导入即可

4文件的字符集,mysql字符集,mysql连接校对等几处字符集设置可以不用管。比如我这里mysql字符集,mysql连接校对分别是latin1和utf8_general_ci,不影响我的导入后的字符集和编码

分析如下:

Windows95、 XP……7操作系统自带的都是GBK字符集(含2万余汉字),是完全兼容GB2312(仅含067万汉字)的。不必将GBK字符集改为小字符集,否则会导致GBK字符集的大量字符不能显示。

检查和修改字符集的方法是:

1、开始→运行→输入cmd

2、确定→输入chcp

显示出活动的代码页是936。

3、开始→控制面板→日期、时间、语言和区域设置→区域和语言选项

4、高级→在代码页转换表中可找到936是简体中文GBK字符集,若不要它的话,可以点击前面小框中的勾,即把勾去掉。

5、继续寻找简体中文GB2312字符集,即代码页是20936,点击前面的小框打上勾。应用→确定即可。

这样修改后,Windows操作系统自带的就变成GB2312字符集了。

如果仅出现乱码,是否字库有问题,建议查一下文件夹windows\fonts中的字库。

扩展资料

Microsoft Windows,是美国微软公司研发的一套操作系统,它问世于1985年,起初仅仅是Microsoft-DOS模拟环境,后续的系统版本由于微软不断的更新升级,不但易用,也慢慢的成为家家户户人们最喜爱的操作系统。

Windows采用了图形化模式GUI,比起从前的DOS需要键入指令使用的方式更为人性化。随着电脑硬件和软件的不断升级,微软的Windows也在不断升级,从架构的16位、32位再到64位, 系统版本从最初的Windows 10 到大家熟知的Windows 95、Windows 98、Windows ME、Windows 2000、Windows 2003、Windows XP、Windows Vista、Windows 7、Windows 8、Windows 81、Windows 10 和 Windows Server服务器企业级操作系统,不断持续更新,微软一直在致力于Windows操作系统的开发和完善。

:Windows操作系统

1、查询Oracle server端的字符集。打开PLSQL的查询窗口中输入下面SQL查询语句。

select userenv('language') from dual;

得到的服务器字符集为:SIMPLIFIED CHINESE_CHINAZHS16GBK

2、我的电脑中环境变量界面,在系统变量中新加:

变量名:NLS_LANG

变量值:SIMPLIFIED CHINESE_CHINAZHS16GBK

变量值跟服务器查询到的值一致即可。

如果你是编译安装的话,你最好加上--with-charset=gbk

--with-extra-charsets=all

另外,如果你上面编译的时候使用了--with-charset=gbk

,那么你创建的数据库默认就是gbk字符集,否则,需要你在创建数据库时指定数据库的字符集,

如:create

database

dbname

default

character

set

gbk;

答案:对MySQL数据库来说,字符集很重要,因为数据库存储的数据大部分都是各种文字,字符集对数据库的存储,处理性能都会有所影响。

主要考虑一下几方面的因素

1满足应用支持语言的需求,应用处理各种各样的文字,发布到使用不同语言的国家或地区,可以选择Unicode字符集,MySQL的话可以选择UTF-8

2如果应用中涉及已有数据的导入,就要充分考虑数据库字符集对已有数据的兼容性。

假设数据是GBK文字,如果选择其他数据库字符集,就可能导致某些文字无法正确导入的问题。

3如果数据库需要支持一般是中文,数据量很大,性能要求也很高,可以选择双字节定长编码的中文字符集,比如GBK。

因为相对于UTF-8而言,GBK比较小,每个汉字只占用2个字节,而UTF-8汉字编码需要3个字节,这样可以减少磁盘I/O,数据库缓存,已经网络传输的时间,从而提高性能。

如果是英文字符,仅有少量汉字字符,那么选择UTF-8更好。

4如果数据库需要做大量的字符运算,如比较、排序,那么选择定长字符集可能会更好,因为定长字符集的处理速度比变长的快。

二、MySQL支持的字符集

MySQL服务器可以支持多种字符集,在同一台服务器,同一个数据库,同一个表都可以指定不同的字符集。

查看所有可用字符集的命令 show character set;

例如MySQL57支持41种可以用字符集

mysql> show character set;

三、MySQL的字符集包括字符集和校对规则

1字符集用来定义MySQL存储字符串的方式

2校对规则用来定义比较字符串的方式。

3字符集和校对规则是一对多关系

4每个字符集至少对应一个校对规则

例如:查看gbk的校对

show collation like 'gbk%';

四、MySQL字符集的设置

1MySQL的字符集和校对规则有4个级别的默认设置,服务器级、数据库级、表级、和字段级。

2服务器字符集和校对规则

一、查看MySQL数据库服务器和数据库MySQL字符集。

mysql> show variables like '%char%';  

+--------------------------+-------------------------------------+------  

| Variable_name            | Value                               |  

+--------------------------+-------------------------------------+------  

| character_set_client     | utf8                                |   -- 客户端字符集  

| character_set_connection | utf8                                |  

| character_set_database   | utf8                                |   -- 数据库字符集  

| character_set_filesystem | binary                              |  

| character_set_results    | utf8                                |  

| character_set_server     | utf8                                |   -- 服务器字符集  

| character_set_system     | utf8                                |  

| character_sets_dir       | D:\MySQL Server 50\share\charsets\ |  

+--------------------------+-------------------------------------+------

二、查看MySQL数据表(table)的MySQL字符集。

mysql> show table status from sqlstudy_db like '%countries%';  

+-----------+--------+---------+------------+------+-----------------+------  

| Name      | Engine | Version | Row_format | Rows | Collation       |  

+-----------+--------+---------+------------+------+-----------------+------  

| countries | InnoDB |      10 | Compact    |   11 | utf8_general_ci |  

+-----------+--------+---------+------------+------+-----------------+------

三、查看MySQL数据列(column)的MySQL字符集。

mysql> show full columns from countries;  

+----------------------+-------------+-----------------+--------  

| Field                | Type        | Collation       |   

+----------------------+-------------+-----------------+--------  

| countries_id         | int(11)     | NULL            |   

| countries_name       | varchar(64) | utf8_general_ci |   

| countries_iso_code_2 | char(2)     | utf8_general_ci |   

| countries_iso_code_3 | char(3)     | utf8_general_ci |   

| address_format_id    | int(11)     | NULL            |   

+----------------------+-------------+-----------------+--------

DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
网站模板库 » 如何查看Oracle数据库字符集,详细操作,xx

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情