【mysql是怎样运行的】-mysql字符集


MySQL 有 4 个级别的字符集和比较规则,分别是 服务器级别、数据库级别、表级别、列级别.

1. 服务器级别

在这里插入图片描述

SHOW VARIABLES like 'character_set_server'
SHOW VARIABLES like 'collation_server'

在启动服务器程序时,可以通过启动选项或者在服务器程序运行过程中使用SET语句来修改这两个变量的值

启动选项:

#当服务器在启动时读取这个配置文件后,这两个系统变量的值便修改了
[server]
character_set_server=gb2312
collation_server=gb2312_chinese_ci

过程中set:

SET character_set_server = gb2312;

2. 数据库级别

我们在创建和修改数据库时可以指定该数据库的字符集和比较规则
在这里插入图片描述
具体语法:

CREATE DATABASE 数据库名
[[DEFAULT] CHARACTER SET 字符集名称]
[[DEFAULT] COLLATE 比较规则名称];

ALTER DATABASE 数据库名
[[DEFAULT] CHARACTER SET 字符集名称]
[[DEFAULT] COLLATE 比较规则名称];

如:
CREATE DATABASE task CHARACTER SET gb2312 COLLATE gb2312_chinese_ci;
在这里插入图片描述
查看

SHOW VARIABLES like 'character_set_database';
SHOW VARIABLES like 'collation_database';

在数据库的创建语句中也可以不指定字符集和比较规则,如这样
CREATE DATABASE 数据库名;
这将默认使用服务器级别的字符集和比较规则作为数据库的字符集和比较规则·

3. 表级别

我们也可以在创建和修改表的时候指定表的字符集和比较规则
具体语法:

CREATE TABLE 表名(
  列的信息
)[[DEFAULT] CHARACTER SET 字符集名称]
[[DEFAULT] COLLATE 比较规则名称];

ALTER TABLE 表名
[[DEFAULT] CHARACTER SET 字符集名称]
[[DEFAULT] COLLATE 比较规则名称];

如:

CREATE TABLE st(
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `user_id` int(11) DEFAULT NULL,
  `entity_type` int(11) DEFAULT NULL,
  `entity_id` int(11) DEFAULT NULL,
  `target_id` int(11) DEFAULT NULL,
  `content` text,
  `status` int(11) DEFAULT NULL,
  `create_time` timestamp NULL DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `index_user_id` (`user_id`)
)CHARACTER SET gb2312 COLLATE gb2312_chinese_ci;

如果创建表的语句中没有指明字符集和比较规则 ,则使用该表所在数据库的字符集和比较规则作为该表的字符集和比较规则.

4. 列级别

对于存储字符串的列,同一个表中不同的列也可以有不同的字符集和比较规则。我们在创建和修改列的时候可以指定该列的字符集和比较规则,语法如下:

CREATE TABLE 表名(
列名 字符串类型 [CHARACTER SET 字符集名称] [COLLATE 比较规则名称]
其他列....);

ALTER TABLE 表名 MODIFY 列名 字符串类型 [CHARACTER SET 字符集名称] [COLLATE 比较规则名称];

如:

ALTER TABLE t MODIFY col VARCHAR(10) CHARACTER SET gbk COLLATE gbk_ chinese_ci;

对于某个列来说,如果在创建和修改表的语句中没有指明字符集和比较规则,则使用该列所在表的字符集和比较规则作为其字符集和比较规则。

总结:
由于字符集和比较规则之间相互关联,因此如果只修改字符集,比较规则也会跟着变化;如果只修改比较规则,字符集也会跟着变化.具体规则如下

  • 只修改字符集,则比较规则将变为修改后的字符集默认的比较规则,
  • 只修改比较规则,则字符集将变为修改后的比较规则对应的字符集.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值