在MySQL中使用utf8mb4

Tin*_*iny 9 mysql utf-8 character-encoding utf8mb4 mysql-5.6

为了utf8mb4在MySQL(5.6.11)中使用4字节,我在my.ini文件中设置了以下变量(my.cnf未找到).此文件位于Windows XP上名为Application Data(C:\Documents and Settings\All Users\Application Data\MySQL\MySQL Server 5.6)的隐藏文件夹中.它在安装目录下不可用.

[client]
port=3306
default-character-set=utf8mb4

[mysql]
default-character-set=utf8mb4

[mysqld]
init-connect='SET NAMES utf8mb4'
collation_server=utf8mb4_unicode_ci
character_set_server=utf8mb4
Run Code Online (Sandbox Code Playgroud)

然后发出以下命令,

SHOW VARIABLES
WHERE Variable_name
LIKE 'character\_set\_%'
OR Variable_name LIKE 'collation%';
Run Code Online (Sandbox Code Playgroud)

仍显示以下列表.

在此输入图像描述

从图片本身可以看出,几个变量仍然使用3字节utf8.


在执行此操作之前,已发出以下命令以对数据库本身进行相应的更改.

ALTER DATABASE database_name
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;
Run Code Online (Sandbox Code Playgroud)

并且还在所述数据库中的每个表上发出以下命令.

ALTER TABLE table_name
CONVERT TO CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;
Run Code Online (Sandbox Code Playgroud)

然而,为什么有些变量尚未设置为所述字符集以及整理?缺什么?

在执行上面指定的每个任务之后,系统(操作系统)本身重新启动.

dec*_*eze 7

客户端通常连接时设置这些值.my.ini中的设置只是默认值,当客户端未明确指定连接编码时,这些默认值适用.由于它们不可靠,因此每个客户端都应指定连接编码.既然你已经有了一些花哨的屏幕截图时,我会想,你有这可能明确一些GUI工具连接设置一些连接编码.

PHP设置连接字符集的示例:

new PDO('mysql:host=localhost;charset=utf8mb4')
Run Code Online (Sandbox Code Playgroud)


Gri*_*ost 6

如果显示全局变量,您可能会发现所有设置实际上都是正确的。

SHOW GLOBAL VARIABLES WHERE Variable_name LIKE 'character\_set\_%' OR Variable_name LIKE 'collation%';

这可能与这个错误有关, 我过去也遇到过同样的问题。我将数据库字符集从 utf8 更改为 utf8mb4。直接从 mysql 命令行执行查询没问题,但我在使用 Workbench 插入表情符号时遇到问题。我最终通过运行手动设置它

SET NAMES 'utf8mb4'

每次我使用 Workbench 打开与数据库的连接时。

使用Sequel Pro作为替代方案也很好。