Mysql

MySQL 轉儲到 MariaDB 的排序規則問題

  • July 22, 2021

我有一個 django 應用程序在帶有 MariaDB 數據庫的登台伺服器(windows server 2012)上執行。當我推送到暫存分支時,我有一個在本地執行 mysqldump 的 git 鉤子。在伺服器上,我有一個從這個分支提取的批處理腳本,遷移 django 遷移,導入轉儲並最終重新啟動站點。看起來有點像這樣:

@echo off
D:
cd <repo>
cmd /k "git stuff && python manage.py migrate && mysql -uroot db < D:/repo/db.sql && stop/start site... && exit
PAUSE

可悲的是,當腳本到達轉儲導入時,它會吐出一個錯誤,說它不知道排序規則(ERROR 1273 (HY000) at line 25: Unknown collation: 'utf8mb4_0900_ai_ci' )。經過一番Google搜尋後,我發現我只需要在編輯器中打開 sql 並將所有 ‘utf8mb4_0900_ai_ci’ 替換為 ‘utf8mb4_general_ci’。當然,這一次有效,這對我來說並不完全有用,因為這個轉儲是自動化過程的一部分。

有人知道自動化排序規則替換的簡單解決方案嗎?

{ 與@nbk 的建議相關(在對問題的評論中)使用:

sed -e 's/utf8mb4_0900_ai_ci/utf8mb4_unicode_ci/g' -i myfilename.sql }

我認為在 Windows 中執行 Unix 命令有兩個主要選項:

  1. Linux 文件的 Windows 子系統 (WSL) ” — 這是由 Microsoft 提供的。根據“ Windows 與 Linux 的互操作性”頁面,您應該能夠通過wsl.exe命令執行sed ,如下所示:
C:\>wsl sed ...

請注意,WSL2 需要 Hyper-V,這可能會阻止 VMWare 和/或 VirtualBox 工作(如果您使用其中一個或兩個)。起初他們沒有使用 Hyper-V,然後他們做到了,然後 Windows 中的某些內容髮生了變化,他們停止使用 Hyper-V,目前狀態有點不清楚(請參閱:WSL2 破壞 VirtualBox 6.1 #798) 2. 許多 Unix/Linux 命令已通過各種 3rd 方包移植到 Windows。我知道的兩個是:

  • Cygwin——這個項目得到積極維護(最近的建構是幾個月前)。這是一個相當大的項目(目前有 9907 個“包” - 命令、庫等),但我認為您可以選擇只安裝您想要的組件。您可以在此處查看完整的軟體包列表。
  • UnxUtils - 比 Cygwin 更小的項目,目前沒有維護(最近的更新是從 2014 年開始,在一個 diff 站點上;稍後會給對外連結接),但我相信這個更輕/更容易接受一兩個命令沒有依賴關係。有兩個要下載文件的站點,目前還不清楚哪個更新,但我想我會去這個站點:http ://unxutils.sourceforge.net/並獲取UnxUtils.zipUnxUpdates.zip文件。

在這兩種情況下,您都可以獲得收藏夾,例如:sedgawk等。

引用自:https://dba.stackexchange.com/questions/295954