提问人:Soennchen 提问时间:10/20/2023 最后编辑:Holger JustSoennchen 更新时间:10/26/2023 访问量:62
Wordpress 创建了 Collation Mess,现在从 MySQL8 开始无法读取它?
Wordpress created Collation Mess and is now unable to read it since MySQL8?
问:
自 2009 年以来,我有一个 Wordpress 网站,目前它在整理中造成了真正的混乱。我得到了:
latin1_swedish_ci
(我的网站上从来没有瑞典语单词?一切都是德语)latin1_german2_ci
utf8mb3_general_ci
utf8mb3_unicode_ci
- 甚至一些
ascii_general_ci
现在一切都很好,直到 MySQL 8 出现。
由于变音符号现在被破坏了,我查看了我的数据库 - 发现它们也被“错误”存储。我猜我的 Wordpress 将 UTF-8 发送到某个 latin1 表中。
但直到现在,一切都很好。
因此,我尝试更新整个数据库排序规则 - 我认识到这不会影响单表排序规则。
当我尝试更改单个表排序规则时(我的想法是将它们全部更改 - 它给了我一个警告,字符可能会被更改 - 并且无法恢复。utf-8_mb4_general_ci
因此,我有点犹豫如何从这里开始。而且不确定。转换所有表中的排序规则可以解决问题吗?
我可以添加一个:
define('DB_CHARSET', 'utf8');
define('DB_COLLATE', '');
到我的wpconfig
但是由于我在网站上有超过 1.000 个帖子,我感到非常恐惧,因为我搞砸了,之后不得不手动完成这一切。
此外,数据库中有 241 个表,因此可能需要一些时间逐个完成。
我的目标是再次在我的 WP 前端和后端正确显示变音符号 äöüß 等。
答:
我从 WordPress Codex 中找到了这个“转换数据库字符集”。对于早于 2010 年的网站,这种情况似乎正在发生。它似乎描述了您需要做什么来修复数据以获得适当的 utf8 支持。
一个关键部分脱颖而出:
在数据库字符集转换方面,每个站点都是不同的 [...] 如果您现在正在阅读本文,那么您可能必须手动执行此操作,因为自从 WP 更改其默认行为以来,为此目的编写的大多数插件都已停止工作。
以下是他们建议的技术的快速总结:
将列转换为 blob,然后使用新字符集将列转换回原始格式 [...] 解决方案是首先将所有包含文本的字段转换为其二进制(“BLOB”)对应数据类型(没有字符集),然后将它们更改回其正常数据类型以及所需的新字符集。
您可能还对其他讨论“请解释 WordPress 如何在低级别使用 MySQL 字符集和排序规则”和回复感兴趣。它提到了WP用来检测要使用的字符集的系统。这可能是故障所在。
祝你好运!我在试图帮助其他人使用他们旧帖子中出现的奇怪字符编码时发现了这一点,而不是专门针对 UTF8 支持,但这似乎是同样的棘手问题。
评论
我现在找到了一个可行的解决方案(在我的托管人支持的帮助下 - 他们真的很友善和乐于助人):
我们在我的wp-config中进行了更改
define('DB_CHARSET', 'utf8');
自
define('DB_CHARSET', 'latin1');
现在就这样了。我的网站再次工作,变音符号显示正确。
因此,现在我可以花一些时间将我的数据库的克隆“重新编码”为 UTF-8 - 因为我认为这将更符合未来。
感谢您的帮助!:-)
问候
安德烈
评论