0%

MySQL database character set encoding

使用MySQL的时候很可能遇到字符集编码相关的问题,尤其是涉及到数据和程序中有中文字符的时候,如果不注意,可能遇到乱码或一些其他的错误。

本文详细解释MySQL相关的字符集编码设置和排序规则相关的问题。

MySQL Server的默认字符集配置

在默认安装MySQL的时候,MySQL Server使用的是英文字符集,服务端的默认配置一般是

character-set-server=latin1

collation-server =latin1_swedish_ci

注意latin1字符集是不支持中文的。第一行的character-set当然是指字符集,第二行的collation是指对应该字符集的比较和排序规则。

charset-server参考手册

通过MySQL命令

mysql> SHOW VARIABLES LIKE 'character%';

可以查看当前服务端的默认配置。

如果在新建数据库的时候不指定character-set和collation,那么就会采用以上的服务器端默认值,所以还是推荐大家手动指定。示例如下:

CREATE DATABASE mydb
  DEFAULT CHARACTER SET utf8
  DEFAULT COLLATE utf8_general_ci;

使用utf8和utf8_general_ci是在中英文应用环境下比较常用的一种设置,排序规则还有utf8_unicode_ci,另外还有编码utf8mb4和对应的排序规则,具体区别会在后面的文章说明。

修改已有数据库的字符编码

如果之前已经建立好了数据库,需要修改当前数据库的编码,可以使用ALTER DATABASE命令。

首先查看当前数据库的编码和排序规则;

mysql> USE mydb;
Database changed
mysql> SHOW VARIABLES LIKE 'character_set_database';
+------------------------+-------+
| Variable_name          | Value |
+------------------------+-------+
| character_set_database | utf8  |
+------------------------+-------+
1 row in set (0.00 sec)

mysql> mysql> SHOW VARIABLES LIKE 'collation_database';
+--------------------+-----------------+
| Variable_name      | Value           |
+--------------------+-----------------+
| collation_database | utf8_general_ci |
+--------------------+-----------------+
1 row in set (0.01 sec)

mysql> 

然后就可以根据情况修改为自己需要的编码设置了;

mysql> ALTER DATABASE databasename CHARACTER SET utf8 COLLATE utf8_general_ci;

参考:

修改MySQL的服务端配置

修改my.cnf配置文件可以修改MySQL Server的默认字符集等设置。以配置文件在/etc/my.cnf(可能根据具体安装情况不同)为例,修改以下几项即可:

[client]
default-character-set = utf8

[mysql]
default-character-set = utf8

[mysqld]
init-connect = 'SET NAMES utf8'
character-set-server = utf8
collation-server = utf8_unicode_ci

参考