問題描述

我將 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 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。