首页 > 解决方案 > 我如何找到列的排序规则,因为我得到不同的结果取决于我在哪里看?

问题描述

如果我使用select * from information_schema.columns where table_name = 'countries';,我会看到所有文本列的 COLLATION_NAME utf8_general_ci

如果我使用show full columns from countries;,我会看到所有文本列的 COLLATION utf8_general_ci,与上述命令的输出相匹配。

如果我使用show create table countries;,我会看到带有 COLLATION 的表,utf8_unicode_ci并且列上没有排序规则。

字符集是utf8.

在所有这些命令之前,我运行过:

ALTER TABLE countries
    CONVERT TO CHARACTER SET UTF8,
    COLLATE utf8_unicode_ci,
    ROW_FORMAT DYNAMIC,
    CHANGE COLUMN `code` `code` char(2) CHARACTER SET UTF8 COLLATE utf8_unicode_ci NOT NULL  COMMENT '',
    CHANGE COLUMN `name` `name` varchar(80) CHARACTER SET UTF8 COLLATE utf8_unicode_ci NOT NULL  COMMENT ''
;

所以我utf8_unicode_ci到处都在期待。

但这似乎对存储在 information_schema.columns 中的值没有影响

目标是将我的整个数据库转换为utf8_unicode_ci.,但在 60GB 左右,我不想浪费时间来转换我不需要做的事情。

我如何确定该列是否已经在正确的排序规则中,当我可以判断的是 information_schema 和各种列描述机制都说与show create table命令相比时它的排序规则是错误的?

标签: mysql

解决方案


似乎试图在同一查询中更改列和表的排序规则,无论顺序如何,都不起作用,只有表排序规则被更改。


推荐阅读