欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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编码。