MySQL默认编码是Latin1,不支持中文。
在学习到MySQL调优schema与数据类型优化时,字符集的选择一般推荐大家使用utf8mb4,而不是我们所熟悉的UTF-8编码方式,这是为什么呢?
这是因为MySQL 从 4.1 版本开始支持 UTF-8,也就是 2003 年,然而目前流行的UTF-8 标准(RFC 3629)是在此之后规定的。正因此,才造就了MySQL中的UTF-8与我们日常开发中的UTF-8不一致,从到导致了些问题。
重点来了:
MySQL的UTF-8只支持每个字符最多三个字节而真正的 UTF-8 是每个字符最多四个字节
虽然MySQL的UTF-8存在缺陷,但是MySQL(包括mariadb)官方却没有修复此bug,而是通过2010年重新发布的“utf8mb4”来支持真正的 UTF-8。因此想要解决此问题,只能够将MySQL数据库设置为utf8mb4字符集才行。
为了以后工作的方便和更好的兼容性,大家以后使用MySQL就老老实实的设置字符集为utf8mb4吧^_^!
对于 CHAR 类型数据,utf8mb4 会多消耗一些空间,根据 Mysql 官方建议,使用 VARCHAR 替代 CHAR。
否则总有一天会遇到头疼的事情。
下面是常用的查看与修改数据库/表编码的语句。
1.查看数据库编码格式
mysql> show variables like 'character%';+--------------------------+--------------------------------------------------------+| Variable_name | Value |+--------------------------+--------------------------------------------------------+| character_set_client | utf8mb4 || character_set_connection | utf8mb4 || character_set_database | latin1 || character_set_filesystem | binary || character_set_results | utf8mb4 || character_set_server | utf8 || character_set_system | utf8 || character_sets_dir | C:\phpstudy_pro\Extensions\MySQL5.7.26\share\charsets\ |+--------------------------+--------------------------------------------------------+8 rows in set (0.04 sec)
2.查看数据表的编码格式
mysql> show create table ;
3.创建数据库时指定数据库的字符集
mysql>create database character set utf8;
4.创建数据表时指定数据表的编码格式
create table tb_books ( name varchar(45) not null, price double not null, bookCount int not null, author varchar(45) not null ) default charset = utf8;
5.修改数据库的编码格式
mysql>alter database character set utf8;
6.修改数据表格编码格式
mysql>alter table character set utf8;
7.修改字段编码格式
mysql>alter table change character set utf8;mysql>alter table user change username username varchar(20) character set utf8 not null;
或者通过修改配置文件来实现
1、找到配置文件
在windows系统下的mysql的安装目录下找到my.ini文件(如果没有的话就把my-medium.ini复制,然后重命名为my.ini即可)
在linux系统下打开配置文件,我使用的linux版本是ubuntu,配置文件在/etc/mysql/my.cnf
2、在[client]和[mysqld]字段在下面均加上下列参数,保存并关闭
default-character-set=utf8或者character-set-server=utf8collation-server=utf8_general_ci
3、重启mysql服务
好了,以上就是MySQL字符乱码问题的解决方法。记录下来是方便自己以后再次用到或者为别人需要是查阅