在 MySQL 中使用 utf8mb4
Using utf8mb4 in MySQL
为了在MySQL(5.6.11)中使用4字节utf8mb4
,我在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
然后发出以下命令,
SHOW VARIABLES
WHERE Variable_name
LIKE 'character\_set\_%'
OR Variable_name LIKE 'collation%';
仍然显示以下列表。
从图片本身可以看出,有几个变量还在使用3字节utf8
。
在执行此操作之前,已发出以下命令以对数据库本身进行相应的更改。
ALTER DATABASE database_name
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;
并且在上述数据库中的每个 table 上也发出了以下命令。
ALTER TABLE table_name
CONVERT TO CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;
但是,为什么有些变量还没有设置为上述字符集和排序规则?缺少什么?
系统(操作系统)本身在执行完上述指定的每项任务后重新启动。
客户端通常在连接时设置这些值。 my.ini 中的设置仅仅是默认值,适用于客户端未明确指定连接编码的情况。由于它们不可靠,每个客户端 应该 指定连接编码。因为你有一些漂亮的屏幕截图,我猜你正在连接一些 GUI 实用程序,它可能明确 确实 设置了一些连接编码。
PHP设置连接字符集的例子:
new PDO('mysql:host=localhost;charset=utf8mb4')
我认为您是以 root 身份连接的,因此 init-connect='SET NAMES utf8mb4'
没有执行。
对任何应用程序代码使用root(或SUPER)是不明智的;仅用于管理操作。
如果显示全局变量,您可能会发现所有设置实际上都是正确的。
SHOW GLOBAL VARIABLES WHERE Variable_name LIKE 'character\_set\_%' OR Variable_name LIKE 'collation%';
这可能与此有关bug
我过去也遇到过同样的问题。我将数据库字符集从 utf8 更改为 utf8mb4。直接从 mysql 命令行执行查询没问题,但我在使用 Workbench 插入表情符号时遇到问题。我最终通过 运行
手动设置了它
SET NAMES 'utf8mb4'
每次我使用 Workbench 打开与我的数据库的连接时。
使用 Sequel Pro 作为替代也很好。
在 win7 上
使用"win + R"并输入"services.msc"
查找 mysql
的服务
检查文件路径。它会告诉你 my.ini
在哪里
打开并添加一些属性:
[客户]
默认字符集 = utf8mb4
[mysql]
默认字符集 = utf8mb4
[mysqld]
字符集客户端握手 = FALSE
字符集服务器 = utf8mb4
归类服务器 = utf8mb4_unicode_ci
重新启动 mysql 服务
为了在MySQL(5.6.11)中使用4字节utf8mb4
,我在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
然后发出以下命令,
SHOW VARIABLES
WHERE Variable_name
LIKE 'character\_set\_%'
OR Variable_name LIKE 'collation%';
仍然显示以下列表。
从图片本身可以看出,有几个变量还在使用3字节utf8
。
在执行此操作之前,已发出以下命令以对数据库本身进行相应的更改。
ALTER DATABASE database_name
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;
并且在上述数据库中的每个 table 上也发出了以下命令。
ALTER TABLE table_name
CONVERT TO CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;
但是,为什么有些变量还没有设置为上述字符集和排序规则?缺少什么?
系统(操作系统)本身在执行完上述指定的每项任务后重新启动。
客户端通常在连接时设置这些值。 my.ini 中的设置仅仅是默认值,适用于客户端未明确指定连接编码的情况。由于它们不可靠,每个客户端 应该 指定连接编码。因为你有一些漂亮的屏幕截图,我猜你正在连接一些 GUI 实用程序,它可能明确 确实 设置了一些连接编码。
PHP设置连接字符集的例子:
new PDO('mysql:host=localhost;charset=utf8mb4')
我认为您是以 root 身份连接的,因此 init-connect='SET NAMES utf8mb4'
没有执行。
对任何应用程序代码使用root(或SUPER)是不明智的;仅用于管理操作。
如果显示全局变量,您可能会发现所有设置实际上都是正确的。
SHOW GLOBAL VARIABLES WHERE Variable_name LIKE 'character\_set\_%' OR Variable_name LIKE 'collation%';
这可能与此有关bug 我过去也遇到过同样的问题。我将数据库字符集从 utf8 更改为 utf8mb4。直接从 mysql 命令行执行查询没问题,但我在使用 Workbench 插入表情符号时遇到问题。我最终通过 运行
手动设置了它SET NAMES 'utf8mb4'
每次我使用 Workbench 打开与我的数据库的连接时。
使用 Sequel Pro 作为替代也很好。
在 win7 上
使用"win + R"并输入"services.msc"
查找 mysql
的服务
检查文件路径。它会告诉你 my.ini
在哪里
打开并添加一些属性:
[客户] 默认字符集 = utf8mb4
[mysql] 默认字符集 = utf8mb4
[mysqld] 字符集客户端握手 = FALSE 字符集服务器 = utf8mb4 归类服务器 = utf8mb4_unicode_ci
重新启动 mysql 服务