问题描述

我将 WP 更新到 4.2,而旧的服务器与 utf8mb4 upgrade requirements 不匹配。

我移动到符合这些要求的另一台服务器,但 WP 将不再启动此数据库升级:/wp-admin/upgrade.php 说 Your WordPress database is already up-to-date 。我试图将我的 wp_post 表手动设置为 utf8mb4,但所有我的特殊字符都成为 「�」 。

任何方式强制启动 maybe_convert_table_to_utf8mb4 在一个简单的升级,而不会丢失所有我的特殊字符?

谢谢!

最佳解决方案

我认为你现在的答案是”No” 。

一旦服务器上已经升级到 WP 4.3 以外的网站,触发 maybe_convert_table_to_utf8mb4 的方法并不容易,该服务器不符合本文的要求:

https://make.wordpress.org/core/2015/04/02/the-utf8mb4-upgrade/

请注意,基于 WP 源代码,似乎将其从 4.2 的更新顺序转移到 4.3(4.2 中已不存在,现在没有升级),也许希望能够获得更多的用户。

所以这是你的答案,它吸吮,但比其他人更准确¯_(ツ)_ /¯

我们目前正在制作一个简单的脚本,使您可以根据操作钩子触发升级顺序的本质。如果我们能够稳定工作,我们会尝试回来分享一下,供别人使用。

我们的基本计划是提取 upgrade_430()的实际数据库部分,将其与数据库更新系统隔离,并手动触发。

编辑:下面的解决方案

虽然没有简单的方法触发脚本,这是一个 hand-coded 解决方法,基于 upgrade_430(),但设计为一个 drop-in 。

https://gist.github.com/carlalexander/4106cfaaf405cec454ba195631bcb6bc

你可以把它放在一个插件中,或者把它粘贴到你的 functions.php 中。不管怎样,它应该是临时的。

它设置为在您访问 https://yoursite.com/?update-utf8bm4=1 时自动触发

这确保它只运行一次,并且您可以选择何时 (对于大型数据库可能需要一段时间,并且您不想让任何人在发生事件时编辑文章) 。

如果您不希望 GET 触发器只是删除 add_action 部件和 if (!isset($_GET['update-utf8bm4']))部件。

再次:完全删除,你不想离开像这样的 GET 触发:)

参考文献

注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。