MySQL字符集和校对规则

一、MySQL字符集和校对规则
MySQL的字符集包括字符集(Character Set)和校对规则(Collation)两个概念。
字符集是用来定义MySQL存储字符串的方式,而校对规则则定义了比较字符串的方式。
字符集和校对规则是一对多的关系,每个字符集至少对应一个校对规则,称为默认校对规则。
查看所有字符集的命令:show character set;
mysql> show character set ;
+----------+-----------------------------+---------------------+--------+
| Charset  | Description                 | Default collation   | Maxlen |
+----------+-----------------------------+---------------------+--------+
| gbk      | GBK Simplified Chinese      | gbk_chinese_ci      |      2 |
| utf8     | UTF-8 Unicode               | utf8_general_ci     |      3 |
+----------+-----------------------------+---------------------+--------+
2 rows in set (0.00 sec)
查看字符集的校对规则:show collation like 'utf8%';
mysql> show collation like 'utf8%';
+--------------------------+---------+-----+---------+----------+---------+
| Collation                | Charset | Id  | Default | Compiled | Sortlen |
+--------------------------+---------+-----+---------+----------+---------+
| utf8_general_ci          | utf8    |  33 | Yes     | Yes      |       1 |
| utf8_bin                 | utf8    |  83 |         | Yes      |       1 |
| utf8_unicode_ci          | utf8    | 192 |         | Yes      |       8 |
+--------------------------+---------+-----+---------+----------+---------+
2 rows in set (0.00 sec)
校对规则命名约定:以其相关的字符集名开始,通常包括一个语言名。
(1) *_bin: 表示的是binary case sensitive collation,也就是说是区分大小写的
(2) *_cs: case sensitive collation,区分大小写
(3) *_ci: case insensitive collation,不区分大小写
二、MySQL的字符集和校对规则有4个级别的默认设置:服务器级、数据库级、表级和字段级。
(1)服务器级:
[mysqld]
default-character-set=utf8
查看字符集和校对规则:
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)
(2)数据库级:
查看字符集和校对规则:
mysql> show variables like 'character_set_database';
+------------------------+-------+
| Variable_name          | Value |
+------------------------+-------+
| character_set_database | utf8  |
+------------------------+-------+
1 row in set (0.00 sec)

mysql> show variables like 'collation_database';
+--------------------+-----------------+
| Variable_name      | Value           |
+--------------------+-----------------+
| collation_database | utf8_general_ci |
+--------------------+-----------------+
1 row in set (0.00 sec)
(3)表级:
查看字符集和校对规则:
mysql> show create table tbl_user \G
*************************** 1. row ***************************
       Table: tbl_user
Create Table: CREATE TABLE `tbl_user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(128) NOT NULL,
  `password` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
  `email` varchar(128) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=7712437 DEFAULT CHARSET=utf8
1 row in set (0.00 sec)
三、简单修改字符集
简单修改只对以后的数据有影响,如果数据库中没有数据或是不想修改以前的数据,可以使用简单修改。
简单修改命令:
alter database character set utf8;
alter table tbl_user character set utf8;
个人推荐在创建数据库时明确指定字符集和校对规则,避免受到默认值的影响。
创建数据库时指定:
create database databasename default CHARACTER SET utf8;
创建数据表时指定:
create table tablename(
....
) ENGIND=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
四、完全修改字符集
当数据库中已有数据,想修改数据集,不能通过简单的修改字符集完成,需要先将原数据导出,经过适当调整后重新导入才可完成。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值