乐趣区

关于mysql:MysqlHow-to-store-UTF8-characters-in-MySQL

原文

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 格局。

退出移动版