mysql 数据库编码问题
程序员文章站
2022-06-01 17:05:52
...
一、mysql 的“utf8”实际上不是真正的 UTF-8
“utf8”只支持每个字符最多三个字节,而真正的 UTF-8 是每个字符最多四个字节。MySQL 一直没有修复这个 bug,他们在 2010 年发布了一个叫作“utf8mb4”的字符集,绕过了这个问题。结论:
- MySQL 的“utf8mb4”是真正的“UTF-8”
- MySQL 的“utf8”是一种“专属的编码”,它能够编码的 Unicode 字符并不多
- 所有在使用“utf8”的 MySQL 和 MariaDB 用户都应该改用“utf8mb4”,永远都不要再使用“utf8”
具体可参考文章 永远不要在 MySQL 中使用“utf8”
二、mysql的数据库、数据表、字段都有编码
2.1 数据库编码
查看数据库编码格式
mysql> show variables like 'character_set_database';
创建数据库时指定数据库的字符集
mysql>create database <数据库名> character set utf8mb4;
修改数据库的编码格式
mysql>alter database <数据库名> character set utf8mb4;
2.2 数据表编码
查看数据表的编码格式
mysql> show create table <表名>;
创建数据表时指定数据表的编码格式
create table tb_books (
name varchar(45) not null,
price double not null,
bookCount int not null,
author varchar(45) not null ) default charset = utf8mb4;
修改数据表格编码格式
mysql>alter table <表名> character set utf8;
2.3 字段编码格式
修改字段编码格式
mysql>alter table <表名> change <字段名> <字段名> <类型> character set utf8mb4;
mysql>alter table user change username username varchar(20) character set utf8mb4 not null;
三、mysql创建数据库时,就指定utf8mb4编码
mysql创建数据库时,就指定utf8mb4编码,这样所建的数据表、字段默认就是utf8mb4编码,就不需要在创建表时给每个表都指定utf8mb4编码。
上一篇: 注解实现Mybaits操作数据库
下一篇: Mac显示和隐藏文件