mysql字符集如何设置为utf8mb4
前言
大家好,我是 三味书屋 的作者某亿,今年五一假期旅游实在是太火爆了,看来疫情三年大家都憋坏了,不知道大家是去西安看大唐不夜城了还是去淄博吃烧烤了,我是在淄博上了三年大学都不知道淄博烧烤出名,结果毕业三年后淄博居然火出圈了,言归正传,五一我是哪的票都没买上,只好在家呆着,于是呢,心血来潮开发了一款文章写作平台:coderlibs.com/web/web-boo…
背景
content字段报错原因
这里的 \xf0\x9f... 就是代表我的表情符号,百度得知,这是由于msql字符集的问题,由于表情这种特殊字符是4字节长度的 UTF-8 字符,而我的数据库默认的字符集是UTF8,只能支持存储3字节长度的 UTF-8 字符,所以才会报错。
MySQL 如何存储表情
MySQL 是一个流行的开源数据库管理系统,是许多网站和应用程序的首选数据库。为了支持更多的字符集和语言,MySQL 5.5.3 版本及以后的版本提供了 UTF8MB4 字符集。
为什么要使用 UTF8MB4 字符集?
UTF8MB4 字符集可以支持更多的 Unicode 字符,包括一些 emoji 表情符号,这些符号在许多应用程序中非常流行。如果您的应用程序需要支持这些字符,所以,我们需要将 MySQL 的字符集设置为 UTF8MB4。
使用什么排序规则呢?
既然我们选择了UTF8MB4 字符集,那么排规则用什么呢?MySQL 支持多种排序规则,以下是一些常见的排序规则:
utf8mb4_general_ci
: 不区分大小写的排序规则,对于大多数情况都足够。utf8mb4_bin
: 区分大小写的排序规则,对于需要精确匹配的情况很有用。utf8mb4_unicode_ci
: 基于 Unicode 标准的排序规则,支持更多的语言和字符集。utf8mb4_0900_ai_ci
:MySQL 8.0 默认的是 utf8mb4_0900_ai_ci,属于 utf8mb4_unicode_ci 中的一种
根据你的需求自行选择,其实都差不多,这里我们统一选择在比较和排序的时候更快的utf8mb4_general_ci
如何设置 MySQL 的字符集为 UTF8MB4?
以下是一个简单的步骤,帮助您将 MySQL 的字符集设置为 UTF8MB4。
1. 打开 MySQL 的配置文件 my.cnf
(linux) 或 my.ini
(win)。
您可以在 MySQL 安装目录中找到该文件,没有这个文件的话需要自己创建,参考实例:
```shell
win: C:\ProgramData\MySQL\MySQL Server 5.7\my.ini
linux: vi /etc/my.cnf || sudo vi /etc/mysql/my.cnf
```
2. 查找以下行:
```
[mysqld]
```
在该行下面添加以下内容:
```
character-set-server=utf8mb4
collation-server=utf8mb4_general_ci
```
3. 完整版实例
```shell
[client]
#password = your_password
port = 3306
socket = /tmp/mysql.sock
default-character-set = utf8mb4
[mysqld]
port = 3306
socket = /tmp/mysql.sock
datadir = /www/server/data
default_storage_engine = InnoDB
character-set-client-handshake = FALSE
character-set-server = utf8mb4
collation-server = utf8mb4_general_ci
init_connect='SET NAMES utf8mb4 COLLATE utf8mb4_general_ci'
[mysql]
no-auto-rehash
default-character-set = utf8mb4
```
4. 保存并关闭文件。
:wq
5. 关于如何将character_set_database以及collation_database更改为utf8mb4
这实际上不是my.cnf(在本例中为my.ini)中的设置。 mySQL从数据库自己的排序规则中获取此设置(创建时)。为了使此与所需的utf8编码内联,请在mysql中(后面有如何进入mysql的示例)执行以下操作:
ALTER DATABASE databasename CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
这里的databasename也就是我们的数据库名:coderlibs
6. 重启 MySQL 服务器。
如果您在 Windows 上使用 MySQL,您可以使用以下命令重启服务器:
```
net stop mysql
net start mysql
```
如果您在 Linux 上使用 MySQL,您可以使用以下命令重启服务器:
```
sudo service mysql restart
```
测试
接下来我们在linux导入一个utf8mb4表,看看能否导入成功
1.进入mysql
mysql -u coderlibs -p // coderlibs是我们的用户角色,也可以用root角色进入
Enter password: // 输入密码
show databases; // 查看数据库列表
use coderlibs; // 使用coderlibs这个数据库
2. 确认 MySQL 的字符集已经设置为 UTF8MB4。
您可以使用以下命令检查 MySQL 的字符集:
```
SHOW VARIABLES LIKE 'character_set%';
```
如果您看到了以下输出,那么说明 MySQL 的字符集已经设置为 UTF8MB4:
```
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8mb4 |
| character_set_connection | utf8mb4 |
| character_set_database | utf8mb4 |
| character_set_filesystem | binary |
| character_set_results | utf8mb4 |
| character_set_server | utf8mb4 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
```
导入mysql表
source /www/wwwroot/temp/article.sql;
如果未报错说明导入成功!
查看数据库以及表的字符集
SHOW CREATE DATABASE databasename;
SHOW CREATE TABLE tablename;
此时,我们可以看到,数据库和新导入的表的字符集都是utf8mb4了,恭喜,可以愉快的保存表情啦!
总结
- 确定哪些字符集/排序规则可用
SHOW CHARSET;
SHOW COLLATION;
- 检查字符集
SHOW VARIABLES LIKE '%character%';
SHOW VARIABLES LIKE '%collation%';
- 设置字符集(在配置文件中-> my.cnf | my.ini)
[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_general_ci
- 检查数据库/表字符集
SHOW CREATE DATABASE databasename;
SHOW CREATE TABLE tablename;
- 更改数据库/表字符集:
ALTER DATABASE databasename CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
ALTER TABLE tablename CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
- 在创建数据库/表时设置:
CREATE DATABASE new_db CHARACTER SET utf8mb4 DEFAULT COLLATE utf8mb4_general_ci;
CREATE TABLE new_table (id INT) CHARSET utf8mb4 COLLATE utf8mb4_general_ci;
将 MySQL 的字符集设置为 UTF8MB4 是一个简单的过程,但它可以为您的应用程序提供更多的字符集和语言支持。如果您的应用程序需要支持更多的字符集和语言,那么您应该考虑将 MySQL 的字符集设置为 UTF8MB4。
转载自:https://juejin.cn/post/7229906749071474749