問題描述

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