为了在MySQL中使用4字节的MySQL (5.6.11),我在my.ini文件中设置了以下变量(没有找到my.cnf)。此文件位于Windows上名为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;然而,为什么还没有将一些变量设置到所述字符集以及排序?少了什么?
系统(操作系统)本身是在执行了上面指定的每一个任务之后重新启动的。
发布于 2015-02-16 12:10:30
客户端通常在连接时设置这些值。my.ini中的设置只是默认设置,当客户端没有显式指定连接编码时,这些设置就会应用。由于它们不可靠,每个客户端都应该指定连接编码。由于您有一些漂亮的屏幕截图,所以我猜您正在连接一些GUI实用程序,这可能确实显式地设置了一些连接编码。
设置连接字符集的PHP示例:
new PDO('mysql:host=localhost;charset=utf8mb4')发布于 2017-03-06 06:51:33
如果您显示您的全局变量,您可能会看到您的所有设置实际上是正确的。
SHOW GLOBAL VARIABLES WHERE Variable_name LIKE 'character\_set\_%' OR Variable_name LIKE 'collation%';
这可能与这个错误有关,我过去也遇到过同样的问题。我将DB字符集从utf8更改为utf8mb4。直接从mysql命令行执行查询是可以的,但我在使用Workbench插入表情符号时遇到了问题。最后,我通过运行
SET NAMES 'utf8mb4'
每次我用Workbench打开到DB的连接时。
使用续集Pro作为替代方案也不错。
发布于 2015-02-23 23:09:27
我认为您正在以根用户身份进行连接,因此没有执行init-connect='SET NAMES utf8mb4'。
在任何应用程序代码中使用根(或SUPER)是不明智的;仅用于管理操作。
https://stackoverflow.com/questions/28540772
复制相似问题