原文
How to store UTF8 characters in MySQL – Ubiq BI
引言
对于 《如何在 MySQL 中存储 UTF8 字符》 的一篇英文博客浏览和集体实战笔记。留神集体试验过程中应用了 docker 的 Mysql 5.7 版本,读者能够依据本身状况调整。
1. Shell 查看字符集
如果不习惯 Linux 的小黑框,最简略的形式是用 navicat 的命令行工具查问,留神用户须要具备对应的系统配置权限,倡议用 root 操作:
首先咱们右击 navicat 的数据库连贯配置(已筹备好),抉择“命令列界面”:
之后是 navicat 仿照的 Shell,期待用户输出:
运行上面的命令能够查看所有字符集配置:
SHOW VARIABLES LIKE 'character_set%';
集体的试验后果如下:
mysql> SHOW VARIABLES LIKE 'character_set%';
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8mb4 |
| character_set_connection | utf8mb4 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8mb4 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.03 sec)
能够看到字符集并不对立。
2. 批改字符集为 UTF-8
集体应用为 docker 的 mysql 自定义映射的配置文件地位,和原始的装置形式配置文件配置略有不同。不过根本的操作形式都是批改 my.cnf
的配置:
[client]
default-character-set=utf8mb4
[mysqld]
character-set-server = utf8mb4
集体操作记录如下,定位到映射文件地位之后,间接 vim
批改配置文件:
[root@localhost conf]# vim /opt/mysql/conf/mysql.cnf
在配置文件当中做如下改变:
[root@localhost conf]# cat /opt/mysql/conf/mysql.cnf
# mysqld custom
[mysqld]
# 上面局部能够疏忽
sort_buffer_size = 16M
read_rnd_buffer_size = 2M
max_connections = 10024
# set character to utf-8
character-set-server = utf8mb4
[client]
# 留神客户端连贯也要一并设置
default-character-set=utf8mb4
批改之后重启 docker 的 mysql 镜像。
[root@localhost conf]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
58fa52f21404 mysql:5.7 "docker-entrypoint.s…" 3 hours ago Up 2 hours 33060/tcp, 0.0.0.0:13306->3306/tcp, :::13306->3306/tcp mysql57
重启之后高枕无忧。
[root@localhost conf]# docker restart 58f
之后仍旧是连贯 mysql 数据库,持续应用 show variables like 'character%';
命令查看以后字符集。
批改之前:
mysql> SHOW VARIABLES LIKE 'character_set%';
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8mb4 |
| character_set_connection | utf8mb4 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8mb4 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
批改之后后果如下:
mysql> show variables like 'character%';
+--------------------------+----------------------------+
| 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/ |
+--------------------------+----------------------------+
3. 数据表转换为 UTF-8
运行上面的命令,将你的数据库的字符集和排序改为 UTF8。用你的数据库名称替换上面的 dbname。
ALTER DATABASE dbname CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;`
dbname 批改为本人的数据库即可
上述命令将把你的数据库中的所有表转换为 UTF8MB4 格局。