我尝试这样做: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?