原文

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 = 16Mread_rnd_buffer_size = 2Mmax_connections = 10024# set character to utf-8character-set-server = utf8mb4[client]# 留神客户端连贯也要一并设置default-character-set=utf8mb4

批改之后重启docker的mysql镜像。

[root@localhost conf]# docker ps CONTAINER ID   IMAGE       COMMAND                  CREATED       STATUS       PORTS                                                    NAMES58fa52f21404   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 格局。