mysql设置字符校验_mysql字符集与校验规则的设置

本文详细介绍了MySQL中字符集和校验规则的设置方法,包括在server、database、table及column四个层级上的应用,并解释了不同层级之间的优先级关系。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

你的位置:

问答吧

-> MySQL

-> 问题详情

mysql字符集与校验规则的设置

默认情况下,我们可以在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的对应值。

作者: ilonng

发布时间: 2008-07-06

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”时也起到了作用。

作者: ilonng

发布时间: 2008-07-06

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]

作者: ilonng

发布时间: 2008-07-06

column:

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

col_name {CHAR | VARCHAR | TEXT} (col_length)

[CHARACTER SET charset_name] [COLLATE collation_name]

作者: ilonng

发布时间: 2008-07-06

那么,这四个级别的字符集和校验规则的指定(级别高低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个值,那么默认就使用上一级别的对应的值。

作者: ilonng

发布时间: 2008-07-06

国家字符集:

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)

作者: ilonng

发布时间: 2008-07-06

呵呵,不错。支持下

作者: shengang34

发布时间: 2008-07-06

具体,欢迎访问:http://rdc.taobao.com/blog/dba/h ... _collation_set.html

作者: ilonng

发布时间: 2008-07-08

一直对字符集感到很困惑。楼主有没有兴趣讲一下字符集和校验规则的来龙去脉?

作者: eyunbo

发布时间: 2008-07-09

QUOTE:原帖由 eyunbo 于 2008-7-9 06:31 发表

一直对字符集感到很困惑。楼主有没有兴趣讲一下字符集和校验规则的来龙去脉?

你可以看这个贴:http://www.itpub.net/viewthread.php?tid=1016276&extra=page%3D1%26amp%3Bfilter%3Dtype%26amp%3Btypeid%3D4

作者: ilonng

发布时间: 2008-07-09

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值