我嘗試這樣做: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?