我试图这样做: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
utf8mb4_bin
是“排序规则”,而不是“字符集”。对应的字符集是简单的utf8mb4
。5.5 之前的版本没有字符集 utf8mb4。
没有简单地转换整个数据库中所有表的所有文本列。
这将转换单个表的所有文本 (
VARCHAR
和) 列:TEXT
即使修复了字符集,我也不相信您提出的复杂 mysql。使用时有几个问题我不清楚
-e
。相反,我会运行SELECT
以生成 列表ALTERs
,然后将它们复制并粘贴到mysql
.更改“表”只会更改您将来可能添加的任何列的默认字符集。
CONVERT TO
更改列 - 更改数据中的编码和更改列的定义。当前是列utf8
吗?你运行的是什么版本的 MySQL?