为了在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;
并且还在所述数据库中的每个表上发出以下命令。
ALTER TABLE table_name
CONVERT TO CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;
然而,为什么有些变量尚未设置为所述字符集以及整理?缺什么?
在执行上面指定的每个任务之后,系统(操作系统)本身重新启动。
客户端通常在连接时设置这些值。 my.ini中的设置只是默认值,当客户端未明确指定连接编码时,这些默认值适用。由于它们不可靠,因此每个客户端都应指定连接编码。既然你有一些花哨的截图,我猜你会用一些GUI实用程序连接,这可能明确地设置了一些连接编码。
PHP设置连接字符集的示例:
new PDO('mysql:host=localhost;charset=utf8mb4')
如果显示全局变量,您可能会看到所有设置实际上都是正确的。
SHOW GLOBAL VARIABLES WHERE Variable_name LIKE 'character\_set\_%' OR Variable_name LIKE 'collation%';
这可能与这个bug有关我过去也面临同样的问题。我将DB字符集从utf8更改为utf8mb4。直接从mysql命令行执行查询是好的,但我在使用Workbench插入表情符号时出现问题。我最终通过运行手动设置它
SET NAMES 'utf8mb4'
每次我用Workbench打开与DB的连接。
使用Sequel Pro作为替代方案也很好。
我认为你是以root身份连接,因此init-connect='SET NAMES utf8mb4'
没有被执行。
对任何应用程序代码使用root(或SUPER)是不明智的;只是为了行政行动。
这是win7