1.配置文件my.cnf(默认latin1)
在Linux系统中,MySQL的配置文件my.cnf
通常位于/etc/mysql/
目录下。要设置MySQL使用UTF-8编码,需要确保客户端、数据库和连接这三个部分都使用UTF-8。
以下是一个简化的配置示例:
[client]default-character-set=utf8[mysql]default-character-set=utf8[mysqld]init_connect='SET NAMES utf8'character-set-server=utf8collation-server=utf8_general_ci
解释:
-
[client]
和[mysql]
部分设置了客户端和交互式连接的默认字符集。 -
[mysqld]
部分中init_connect
选项为每个连接自动执行SET NAMES utf8
,这告诉MySQL客户端将使用UTF-8发送查询,并且服务器也期望用UTF-8来发送数据。 -
character-set-server
和collation-server
设置了服务器端的默认字符集和校对集。
保存这些设置,然后重启MySQL服务以使配置生效:
sudo systemctl restart mysqld
确保MySQL的版本和您的配置兼容。如果您使用的是MySQL 5.7.5或更高版本,则可以使用character-set-server=utf8mb4
和collation-server=utf8mb4_unicode_ci
来支持更广泛的Unicode字符集。
以下是一个简单的my.cnf
配置示例:
[mysqld]character-set-server=utf8mb4collation-server=utf8mb4_unicode_ciinit_connect='SET NAMES utf8mb4'[client]default-character-set=utf8mb4[mysql]default-character-set=utf8mb4
解释:
-
character-set-server
: 设置服务器字符集。 -
collation-server
: 设置服务器字符排序规则。 -
init_connect
: 每个客户端连接时自动执行的设置字符集命令。 -
default-character-set
: 设置客户端默认字符集。
在修改了my.cnf
配置文件后,需要重启MySQL服务以使配置生效:
sudo systemctl restart mysqld
或者,如果你不使用systemctl,可以使用以下命令:
sudo service mysqld restart
确保在重启MySQL服务之前备份好你的数据库,以防出现问题。
2.修改已有数据库编码
一个示例代码,假设你要将名为mydb的库
的编码从当前编码更改为utf8mb4
:
ALTER DATABASE mydb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
3.修改已有表编码
一个示例代码,假设你要将名为my_table
的表的编码从当前编码更改为utf8mb4
:
ALTER TABLE my_table CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
请注意,你还需要指定正确的校对规则(COLLATE
),这里使用的是utf8mb4_unicode_ci
,这是与utf8mb4
字符集相关的一个常用校对规则,utf-8常用校对规则为utf8_general_ci。
4.修改特定列的编码
ALTER TABLE my_table CHANGE column_name column_name VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
在这里,column_name
是需要更改编码的列的名称,VARCHAR(255)
是列的数据类型和大小,根据实际情况进行调整。
确保在执行这些操作之前,你有足够的权限,并且已经备份了数据库,以防操作出现意外情况。