更改 MySQL 中所有表格和列的排序規則

更改 MySQL 中所有表格和列的排序規則

我嘗試這樣做:https://serverfault.com/a/65572/603515

但我對其進行了稍微更改,以僅針對我要更改的資料庫。

mysql -B -N --host=localhost --user=root --password=secret \
      -e "select CONCAT('alter table ',TABLE_SCHEMA,'.',
          TABLE_NAME,' charset=utf8mb4_bin;')
        from information_schema.TABLES WHERE TABLE_SCHEMA = 'usda_nndsr'; 
     select CONCAT('alter table ',TABLE_SCHEMA,'.',TABLE_NAME,' alter column ',
         COLUMN_NAME,' charset=utf8mb4_bin;')
         from information_schema.COLUMNS WHERE TABLE_SCHEMA ='usda_nndsr';" |
     mysql --host=localhost --user=root --password=secret

但它告訴我:

mysql: mysql: [Warning] Using a password on the command line interface can be insecure.[Warning] Using a password on the command line interface can be insecure.

ERROR 1115 (42000) at line 1: Unknown character set: 'utf8mb4_bin'

我想要,utf8mb4_bin因為我聽說 MySQL utf8 不是真正的 utf8,只使用 3 個位元組。

如何編輯我的查詢或命令來進行更改。目前它是預設的瑞典語排序規則。

MySQL版本:

$ mysql -V
mysql  Ver 14.14 Distrib 5.7.32, for Linux (x86_64) using  EditLine wrapper

答案1

utf8mb4_bin是“排序規則”,而不是“字元集”。對應的字符集很簡單utf8mb4

5.5之前的版本沒有字元集utf8mb4。

不能簡單地轉換整個資料庫中所有表格的所有文字列。

這將轉換單一表的所有文字(VARCHAR和)列:TEXT

ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4;

即使在修復了字符集之後,我也不會相信您建議的複雜 mysql。使用過程中有幾個問題不太懂-e。相反,我會運行SELECT來產生 的列表ALTERs,然後將它們複製並貼上到 中mysql

更改“表”只會更改任何內容的預設字元集未來您可能會新增的列。

CONVERT TO更改列-既更改資料中的編碼又更改列的定義。目前這些欄位是嗎utf8?您正在運行什麼版本的 MySQL?

相關內容