查看 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编码,输出乱码)
(对有数据的数据库,改变编码的正确方式是需要在 导出,导入操作实现)