在MySQL中使用utf8mb4

问题描述 投票:9回答:4

为了在MySQL(5.6.11)中使用4字节的utf8mb4,我在my.ini文件中设置了以下变量(找不到my.cnf)。此文件位于Windows XP上名为Application DataC:\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;

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

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

mysql utf-8 character-encoding mysql-5.6 utf8mb4
4个回答
7
投票

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

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

new PDO('mysql:host=localhost;charset=utf8mb4')

4
投票

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

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作为替代方案也很好。


1
投票

我认为你是以root身份连接,因此init-connect='SET NAMES utf8mb4'没有被执行。

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


-1
投票

这是win7

  1. 使用“win + R”并输入“services.msc”
  2. 找到mysql的服务
  3. 检查文件路径。它会告诉你my.ini在哪里
  4. 打开并添加一些属性: [client] default-character-set = utf8mb4 [mysql] default-character-set = utf8mb4 [mysqld] character-set-client-handshake = FALSE character-set-server = utf8mb4 collat​​ion-server = utf8mb4_unicode_ci
  5. 重启mysql服务
© www.soinside.com 2019 - 2024. All rights reserved.