如何查看Oracle数据库字符集,详细操作,xx
数据库服务器字符集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 |
+----------------------+-------------+-----------------+--------
0条评论