mysql设置字符集后不提交更改

Posted

技术标签:

【中文标题】mysql设置字符集后不提交更改【英文标题】:Mysql does not commit changes after setting character set 【发布时间】:2019-06-29 02:18:11 【问题描述】:

在我使用mysql -u root -p 登录到 MySQL 之后,我尝试使用set character_set_server = utf8;(它最初是 utf8mb4)设置字符集服务器(我还尝试了另一个用户,并且还使用--database 指定了一个数据库)。运行set 命令后,我使用show variables like "%charac%" 检查了变量。它将正确的值显示为 utf8。但是,在我退出会话并重新登录并重新检查变量后,它显示 utf8mb4。我还尝试在设置字符集后运行commit;,同样它没有改变值。我该怎么办?

【问题讨论】:

为什么要“降级”字符集? 【参考方案1】:

您尝试做的不是交易。事务与 DML(数据修改语言)语句(如 select、insert、upate、delete)一起使用。因此,在这里提交不是正确的做法。

大多数变量都有一个全局值和一个仅对当前会话有效的值。您可以在手册here 中看到这一点(查看scope)。当您未指定要更改全局值时,将假定会话值。

试试

set global character_set_server = 'utf8';

将该更改也添加到您的etc/my.cnf [mysqld] 部分下。否则,当你重新启动 mysql 服务器 (mysqld) 时,此更改将再次丢失。

最后,您可能希望将其保留在 uft8mb4。您可能会认为,您不需要额外的字节,但请记住,仅当您在文本中真正使用像表情符号这样的字符时,才会使用额外的字节。并且在性能方面它实际上表现更好。我手头没有证据,但我最近参加了一个数据库会议,其中一个演讲是关于基准检查的。它在那里说,它的表现要好得多。之前实现的utf8是残缺的utf8,应该尽快死掉。

【讨论】:

可能会议引用的是 utf8mb4 性能在 MySQL 8.0 中得到了显着的改进。 (至少,我是这么听的。) 是的,你是对的,在 MySQL 8.0 中,但它的性能也比 utf8 好。应该澄清更多。谢谢。 至于“尽快死去”——我完全同意。我在这个网站上的大部分“声誉”来自于对 Emoji、767 索引限制、Mojibake 等方面的帮助。

以上是关于mysql设置字符集后不提交更改的主要内容,如果未能解决你的问题,请参考以下文章

MYSQL 第十章 MySQL事务和字符集

如何设置Mysql数据库默认的字符集编码为GBK

企业案例--生产环节更改mysql字符集

TryUpdateModel在属性值更改后不更新对象

如何更改图像并在 5 秒后重新运行线程中的主要活动后不回到 android 中的基本布局

mysql中怎么给字段设置默认字符集