Mysql
MariaDB 上 UTF8 中的索引衝突
我在將數據庫從 SQLite3 移動(轉換)到在 Synology NAS 上執行的 MariaDB 10.3.29 伺服器時遇到問題。
一張表actor有 3 列
- 演員 ID
- 姓名
- 藝術網址
一些演員在 SQLite 3 DB 中有 2 個條目,一個是英語化的名字,比如 Sinead Matthews,另一個是特殊字元,Sinead Matthews。actor_id 是主鍵,所以沒關係。但是該模式會根據名稱創建一個唯一索引。MariaDB 上創建索引的(對我而言)黑盒將兩種形式視為相同,並產生引發錯誤的衝突。
錯誤 1062 (23000):重複條目 ‘Sinead Matthews’ 鍵 ‘ix_actor_1’
我的 MariaDB 使用 utf8 作為字元集。我用特殊字元插入了 1 行。選擇查詢顯示帶有特殊字元的名稱。然後嘗試插入名稱沒有特殊字元的行會引發錯誤。
我該如何解決這個問題?
我認為你有更多的排序規則問題而不是字元集問題。您知道 SQLite 中的排序規則是什麼,現在 MariaDB 實例中的排序規則是什麼嗎?
您可以將 MariaDB 中的排序規則更改為更合適的排序規則,例如
latin1_swedish_ci
我認為允許插入第二行的預設值(將這兩個值視為不同的值)。可以在伺服器、數據庫、表和列級別指定排序規則。如果您想在數據庫級別更改它,這通常是最合適的(即您通常應該在整個數據庫中使用相同的排序規則),您可以使用
ALTER DATABASE
命令來完成。例如:ALTER DATABASE YourDatabaseName CHARACTER SET='latin1' COLLATE='latin1_swedish_ci';
作為參考,這裡也是MariaDB 支持的字元集列表,
latin1
是預設值。