[转帖]mysql字符集与校验规则的设置_MySQL, Oracle及数据库讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  MySQL, Oracle及数据库讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 2122 | 回复: 0   主题: [转帖]mysql字符集与校验规则的设置        下一篇 
张三丰
注册用户
等级:上尉
经验:511
发帖:53
精华:0
注册:2013-11-19
状态:离线
发送短消息息给张三丰 加好友    发送短消息息给张三丰 发消息
发表于: IP:您无权察看 2015-3-24 14:22:27 | [全部帖] [楼主帖] 楼主

默认情况下,我们可以在4个级别分别设定mysql的字符集和校验规则,分别是server、database、table和column。实际上,我们甚至还可以单独对一串字符串设定其字符集和校验规则。下面就分别来对四个级别的设定说明一下:

server:


在启动mysql服务的时候,可以指定mysql server的字符集和校验规则,通过如下方式:

mysqld --character-set-server=latin1 --collation-server=latin1_swedish_ci


如果不亲自指定它们,那么mysql就会使用默认值。一般是latin1和latin1_swedish_ci。当然这个默认值是可以修改的,但是方法只有一种,那就是重编译源代码。采用如下方式:

./configure --with-charset=gbk --with-collation=gbk_bin


如何查询当前的server的字符集和校验规则的值,可以查看系统参数character_set_server和collation_server:

mysql> show variables like \'character_set_server%\';
+----------------------+--------+
| Variable_name | Value |
+----------------------+--------+
| character_set_server | latin1 |
+----------------------+--------+
1 row in set (0.00 sec)
mysql> show variables like \'collation_server%\';
+------------------+-------------------+
| Variable_name | Value |
+------------------+-------------------+
| collation_server | latin1_swedish_ci |
+------------------+-------------------+
1 row in set (0.00 sec)


server的字符集和校验规则的唯一作用就是,当database的字符集和校验规则没有指定的时候,就默认使用server的对应值。

database:


我们在创建和修改数据库的时候,可以指定其字符集和校验规则:

CREATE DATABASE db_name
[[DEFAULT] CHARACTER SET charset_name]
[[DEFAULT] COLLATE collation_name];
ALTER DATABASE db_name
[[DEFAULT] CHARACTER SET charset_name]
[[DEFAULT] COLLATE collation_name];


对应查看当前数据库的字符集和校验规则的系统参数是\'character_set_database\'和\'collation_database\',如下:

mysql> show variables like \'character_set_database\';
+------------------------+-------+
| Variable_name | Value |
+------------------------+-------+
| character_set_database | gbk |
+------------------------+-------+
1 row in set (0.00 sec)
mysql> show variables like \'collation_database\';
+--------------------+---------+
| Variable_name | Value |
+--------------------+---------+
| collation_database | gbk_bin |
+--------------------+---------+
1 row in set (0.00 sec)


数据库的字符集和校验规则的作用有二,其一是当没有在表级别知道它们,那么默认就使用数据库基本的值;其二是在“load data infile”时也起到了作用。

table:


在创建表或者修改表结构的时候,我们可以通过如下方式指定这个表的字符集和校验规则:

CREATE TABLE tbl_name (column_list)
[[DEFAULT] CHARACTER SET charset_name] [COLLATE collation_name]]
ALTER TABLE tbl_name
[[DEFAULT] CHARACTER SET charset_name] [COLLATE collation_name]
column:


具体的表的具体的某个字段,我们也可以指定其字符集和校验规则,如下:

col_name {CHAR | VARCHAR | TEXT} (col_length)
[CHARACTER SET charset_name] [COLLATE collation_name]


那么,这四个级别的字符集和校验规则的指定(级别高低server>database>table>column),mysql最终以何种形式来存储和显示字符串的呢?

1、本级别中,如果同时指定character set和collate,那么就使用指定的值;

2、本级别中,只指定character set而没有指定collate,那么就使用指定的character set值和其对应的默认的collation值;

3、本级别中,只指定collate而没有指定character set,那么就使用指定的collation值和其所对应的character set值;

4、本级别中,都没有指定这2个值,那么默认就使用上一级别的对应的值。

国家字符集:

mysql中国家字符集的概念,其表示使用预先定义的字符集,在mysql5.1中使用utf8作为其预先的定义的字符集。

因此,下面几种类型的定义,其实是等效的:

CHAR(10) CHARACTER SET utf8
NATIONAL CHARACTER(10)
NCHAR(10)


下面几种类型也是等效的:

VARCHAR(10) CHARACTER SET utf8
NATIONAL VARCHAR(10)
NCHAR VARCHAR(10)
NATIONAL CHARACTER VARYING(10)
NATIONAL CHAR VARYING(10)


--转自 北京联动北方科技有限公司




赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论