MySQL基础学习之字符集的应用
字符集的查询与修改
在mysql 8.0
版本之前, 默认字符集是latin1
, 使用默认字符集的时候输入中文会出现乱码问题, 所以我们开发人员经常会将MySQL
字符集的格式修改为utf8
解决乱码问题, utf8字符集默认指向的是utf8mb3
格式编码, 在MySQL 8.0
版本开始, 默认的字符集将改为了utf8mb4
, 有效的解决了中文乱码问题
查看当前MySQL
数据库使用的字符集
show variables like 'character%';
-- 或
show variables like '%char%';
MySQL 8.0版本查询默认字符集
MySQL 5.7版本查询默认字符集
对于MySQL 5.7
版本我们可以通过Navicat
等工具来对数据库的默认字符集进行修改, 也可以通过修改MySQL
的配置文件my.cnf
来修改默认字符集
my.cnf
文件在linux
系统下的地址是: /etc/my.cnf 在 [mysqld] 下新增 character_set_server=utf8
修改成功之后注意要重启 MySQL, 使配置生效, 重启命令systemctl restart mysqld.service
在上面字符集列表里面有几个属性可以了解一下:
character_set_client
服务器解码请求时使用的字符集character_set_connection
服务器处理请求时会把请求字符串从character_set_client
转为character_set_connection
character_set_results
服务器向客户端返回数据时使用的字符集
字符集比较规则
utf8mb3和 utf8mb4
在日常操作中utf8
字符集表示一个字符需要 14个字节, 但是我们常用的一些字符只需要使用 13个字节, 而字符集表示使用一个字符的最大字节长度, 长度不同占用空间大小也不同, 所以在MySQL
中定义了utf8mb3
和utf8mb4
:
utf8mb3
1~3字节utf8mb4
1~4字节
在MySQL
中, utf8通常指的是 utf8mb4
查看当前MySQL
支持的字符集可输入下列查询:
show charset;
-- 或
show character set;
我们可以看到查询结果一共有四列, 分别是字符集名称, 简介, 该字符集默认排序规则, 使用该字符集最大字节数
Default collation
表示的是该字符集默认的比较规则, utf8_general_ci
是一种通用的比较规则,这里可以选择比较规则主要作用于哪种语言 在我们使用Navicat
编辑数据库的时候可以看到当前数据库使用的字符集和排序规则
utf8_croatiian_ci
就是以罗克地亚语的规则比较,utf8_czech_ci
以捷克语的规则比较utf8_danish_ci
以丹麦语规则比较- ...
utf8_unicode_ci和 utf8_general_ci对中英文来说没有区别 utf8_general_ci 校对速度快, 准确度较差 utf8_unicode_ci 准确度高, 但校对速度稍慢
一般来讲使用utf8_general_ci
就够了, 但是如果应用中使用到德语, 法语或者俄语, 一定要使用 utf8_unicode_ci, 因为 utf8_general_ci是一种比较老的标准 utf8_unicode_ci会更符合这些国家人们的习惯
比较规则后缀含义
后缀 | 英文释义 | 描述 |
---|---|---|
_ai | accent insensitive | 不区分重音 |
_as | accent sensitive | 区分重音 |
_ci | case insensitive | 不区分大小写 |
_cs | case sensitive | 区分大小写 |
_bin | binary | 以二进制的方式比较 |
字符集常用SQL
-- 查看服务器的字符集和比较规则
show variables like '%_server';
-- 查看数据库的字符集和比较规则
show variables like '%_database';
-- 查看具体数据库的字符集
show create database 表名;
-- 修改具体数据库的字符集
alter database 表名 default character set 'utf8' collate 'utf8_general_ci';
修改数据库的默认字符集和比较规则后, 原来已经创建的表的字符集和比较规则并不会改变, 需要单独的去更改
以上就是MySQL基础学习之字符集的应用的详细内容,更多关于MySQL字符集的资料请关注我们其它相关文章!
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341