20

为了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

然后发出以下命令,

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

仍然显示以下列表。

在此处输入图像描述

从图片本身可以清楚地看出,有几个变量仍在使用 3-byte utf8


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

ALTER DATABASE database_name
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;

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

ALTER TABLE table_name
CONVERT TO CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;

然而,一些变量尚未设置为所述字符集以及排序规则的原因是什么?什么不见​​了?

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

4

4 回答 4

14

客户端通常在连接时设置这些值。my.ini 中的设置只是在客户端未明确指定连接编码时应用的默认值。由于它们不可靠,因此每个客户端都应指定连接编码。由于您有一些精美的屏幕截图,我猜您正在连接一些 GUI 实用程序,该实用程序可能明确设置了一些连接编码。

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

new PDO('mysql:host=localhost;charset=utf8mb4')
于 2015-02-16T12:10:30.347 回答
4

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

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

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

SET NAMES 'utf8mb4'

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

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

于 2017-03-06T06:51:33.650 回答
1

我认为您以 root 身份连接,因此init-connect='SET NAMES utf8mb4'未执行。

对任何应用程序代码使用 root(或 SUPER)是不明智的;仅用于行政行为。

于 2015-02-23T23:09:27.620 回答
-1

在win7上

  1. 使用“win + R”并输入“services.msc”

  2. 查找mysql的服务

  3. 检查文件路径。它会告诉你 my.ini 在哪里

  4. 打开并添加一些属性:

    [客户端] 默认字符集 = utf8mb4

    [mysql] 默认字符集 = utf8mb4

    [mysqld] 字符集客户端握手 = FALSE 字符集服务器 = utf8mb4 排序服务器 = utf8mb4_unicode_ci

  5. 重启mysql服务

于 2018-01-05T07:45:34.917 回答