当前位置: DB社区 > 02-mysql > 阅读正文

mysql 数据编码

2020.12.29.   382 次   2770字

查看 mysql 相关编码设置

查看 mysql 相关编码

show variables like 'character%';

mysql 编码设置相关有 8 个属性,如下

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       | C:\Program Files\MySQL\MySQL Server 8.0\share\charsets\ |
+--------------------------+---------------------------------------------------------+
client, connection, results

客户端编码,与连接编码,与返回编码必须保持一致,这三个编码默认是一致的。

  • set character_set_client = charset_name;
  • set character_set_connection = charset_name;
  • set character_set_results = charset_name;

可以通过以下命令,完成对这三个编码的统一设置。

实例:例如统一设置为 uft8mb4 的命令如下:

set names utf8mb4;
database, server

数据库默认编码是 character_set_database ,通过 set 命令修改,下面演示从 utf8mb4 转为 utf8。

(注意:set 命令只是临时生效,推出后回到默认值,在安装目录下 my.ini 修改)

mysql> show variables like 'character_set_database%';
+------------------------+---------+
| Variable_name          | Value   |
+------------------------+---------+
| character_set_database | utf8mb4 |
+------------------------+---------+
1 row in set (0.07 sec)

mysql> set character_set_database = utf8;
Query OK, 0 rows affected (0.00 sec)

mysql> show variables like 'character_set_database%';
+------------------------+-------+
| Variable_name          | Value |
+------------------------+-------+
| character_set_database | utf8  |
+------------------------+-------+
1 row in set (0.06 sec)

服务器编码是 character_set_server ,这个一般不用改,修改方式与 db 相似。

三个不需要关心的编码设置

还有剩下的 3 个编码,是不需要我们关心的,分别是

  • character_set_filesystem //文件系统使用的编码
  • character_set_system //系统使用编码
  • character_sets_dir //字符安装目录
修改具体某个数据库编码

可以查看数据库创建语句,查询该数据库编码

show create database 数据库名;

实例:

mysql> show create database mytest;
+----------+-----------------------------------------------------------------+
| Database | Create Database                                                 |
+----------+-----------------------------------------------------------------+
| mytest   | CREATE DATABASE `mytest` /*!40100 DEFAULT CHARACTER SET utf8 */ |
+----------+-----------------------------------------------------------------+
1 row in set (0.02 sec)
mysql> show create database www5252;
+----------+---------------------------------------------------------------------+
| Database | Create Database                                                     |
+----------+---------------------------------------------------------------------+
| www5252  | CREATE DATABASE `www5252` /*!40100 DEFAULT CHARACTER SET utf8mb4 */ |
+----------+---------------------------------------------------------------------+
1 row in set (0.01 sec)

可以看到这 2 个数据库设置了不同的编码,分别是 utf8 与 utf8mb4

可以使用如下命令修改某个数据库的编码格式(假设改为 utf8),

alter database <数据库名> character set utf8;

( 这个命令会 永久 改变该数据库的编码格式,和 set 不一样)

(不要随意改来改去,否则容易导致乱码,它并不会改动所有的数据内容,只是改变了操作时,交互的格式,比如 gbk 的数据内容强制改为 uft8编码,输出乱码)

(对有数据的数据库,改变编码的正确方式是需要在 导出,导入操作实现)

本篇完,还有疑问?

加入QQ交流群:11500065636 IT 技术交流群