簡體   English   中英

將列整理從 utf8mb4_general_ci 更改為 utf8mb4_bin 損壞表

[英]Change column collate from utf8mb4_general_ci to utf8mb4_bin corrupt the table

由於某些原因(需要區分重音),我們需要在 mysql 數據庫(mysql 和 mariadb)上將列的排序規則從 utf8mb4_general_ci 更改為 utf8mb4_bin。 所以我們只是執行這個請求:

ALTER TABLE table MODIFY column VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;

此列具有唯一索引。 這在多個環境中完美運行,但是我們不知道為什么會破壞其他一些環境上的數據(顯然是生產環境......):

Corruption of an index tree: table `db`.`table` index `unique_column`, father ptr page no 640, child page no 683 PHYSICAL RECORD: n_fields 2; compact format; info bits 0

有誰知道為什么? 我們無法重現,並且 prod 環境不是測試的好地方...也許是數據問題,因為當我們重新導入該數據庫的轉儲時,它可以正常工作,但是如何找到這個數據問題?

謝謝 ! (對不起,我的英語不好)

您可以使用轉換

ALTER TABLE tablename CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_bin

但是沒有備份仍然什么都不做

問題解決了,我們刪除唯一索引,更改排序規則並重新創建索引。 問題解決了,但我們不明白為什么我們需要在少數數據庫上這樣做......

如果您只想更改一列:

ALTER TABLE <table_name> MODIFY <column_name> VARCHAR(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM