更改 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?

相关内容