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

最佳答案

您想要做的不是交易。事务与DML(数据修改语言)语句(例如选择,插入,更新,删除)一起使用。因此,在这里进行提交不是正确的事情。

大多数变量具有全局值和仅对当前会话有效的值。您可以在手册here中看到它(请参阅scope)。当您不指定要更改全局值时,将使用会话值。

试试看

set global character_set_server = 'utf8';


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

最后,您可能希望将其保留在uft8mb4处。您可能会认为不需要多余的字节,但是请记住,仅当您在文本中真正使用像表情符号这样的字符时,才使用该额外的字节。在性能方面,它实际上表现更好。我没有手头的证据,但是最近我在一次数据库会议上,那场演讲的主题是基准测试。它说,它的性能要好得多。以前由utf8实现的是残缺的utf8,应该尽快消失。

关于mysql - 设置字符集后,MySQL不提交更改,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54531428/

10-16 15:41