MySQL字符集的相关操作
在MySQL 8.0版本之前,默认字符集为 latin1
,utf8字符集指向的是 utf8mb3
。从MySQL8.0开始,数据库的默认编码将改为 utf8mb4
,从而避免乱码的问题。
查看默认使用的字符集
show variables like 'character%'; # 或者 show variables like '%char%';
- MySQL8.0中执行:
- MySQL5.7中执行:
MySQL 5.7 默认的客户端和服务器都用了 latin1
,不支持中文,保存中文会报错。MySQL5.7截图如
下:
在MySQL5.7中添加中文数据时,报错:
因为默认情况下,创建表使用的是 latin1 。如下:
修改字符集
vim /etc/my.cnf
在MySQL5.7或之前的版本中,在文件最后加上中文字符集配置:
但是原库、原表的设定不会发生变化,参数修改只对新建的数据库生效。
character_set_server=utf8
重新启动MySQL服务
systemctl restart mysqld
修改已有库与表的字符集
修改已创建数据库的字符集
alter database dbname character set 'utf8';
修改已创建数据表的字符集
alter table t_name convert to character set 'utf8';
- 注意:
原有的数据如果是用非
'utf8'
编码的话,数据本身编码不会发生改变。已有数据需要导
出或删除,然后重新插入。
各级别的字符集
MySQL有4个级别的字符集和比较规则,分别是:
服务器级别
数据库级别
表级别
列级别
show variables like 'character%';
变量名 | 说明 |
---|---|
character_set_server | 服务器级别的字符集 |
character_set_database | 当前数据库的字符集 |
character_set_client | 服务器解码请求时使用的字符集 |
character_set_connection | 服务器处理请求时会把请求字符串从character_set_client转为character_set_connection |
character_set_results | 服务器向客户端返回数据时使用的字符集 |
服务器级别
- character_set_server :服务器级别的字符集
我们可以在启动服务器程序时通过启动选项或者在服务器程序运行过程中使用 SET 语句修改这两个变量
的值。比如我们可以在配置文件中这样写:
[server] character_set_server=gbk # 默认字符集 collation_server=gbk_chinese_ci #对应的默认的比较规则
当服务器启动的时候读取这个配置文件后这两个系统变量的值便修改了。
数据库级别
- character_set_database :当前数据库的字符集
我们在创建和修改数据库的时候可以指定该数据库的字符集和比较规则,具体语法如下:
如果创建数据库时,没有显式的指定字符集和比较规则,则该数据库默认用服务器的字符集和比较规则。
表级别
我们也可以在创建和修改表的时候指定表的字符集和比较规则,语法如下:
如果创建和修改表的语句中没有指明字符集和比较规则,将使用该表所在数据库的字符集和比较规则作
为该表的字符集和比较规则。
列级别
对于存储字符串的列,同一个表中的不同的列也可以有不同的字符集和比较规则。我们在创建和修改列
定义的时候可以指定该列的字符集和比较规则,语法如下:
对于某个列来说,如果在创建和修改的语句中没有指明字符集和比较规则,将使用该列所在表的字符集
和比较规则作为该列的字符集和比较规则。
- 提示
在转换列的字符集时需要注意,如果转换前列中存储的数据不能用转换后的字符集进行表示会发生
错误。比方说原先列使用的字符集是utf8,列中存储了一些汉字,现在把列的字符集转换为ascii的
话就会出错,因为ascii字符集并不能表示汉字字符。
字符集
utf8 与 utf8mb4
utf8 字符集表示一个字符需要使用1~4个字节,但是我们常用的一些字符使用1~3个字节就可以表示 了。而字符集表示一个字符所用的最大字节长度,在某些方面会影响系统的存储和性能,所以设计 MySQL的设计者偷偷的定义了两个概念:
utf8mb3 :阉割过的 utf8 字符集,只使用1~3个字节表示字符。
utf8mb4 :正宗的 utf8 字符集,使用1~4个字节表示字符。
本文来自博客园,作者:Lz_蚂蚱,转载请注明原文链接:https://www.cnblogs.com/leizia/p/18449153
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步