查询以显示所有表及其排序规则

Posted

技术标签:

【中文标题】查询以显示所有表及其排序规则【英文标题】:Query to show all tables and their collation 【发布时间】:2011-06-24 07:37:03 【问题描述】:

是否有可以在 mysql 中运行的查询来显示所有表及其默认排序规则?如果有 on 可以显示所有表的所有列上的所有排序规则,那就更好了。

【问题讨论】:

【参考方案1】:
SELECT TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME, COLLATION_NAME
    FROM INFORMATION_SCHEMA.COLUMNS

【讨论】:

知道如何在 BigQuery 中执行此操作吗? @Mohith7548 请提出一个新问题,而不是评论十年前的答案。 如果这不起作用,请用分号尝试lol【参考方案2】:

请记住,排序规则可以定义到表和列。

列的排序规则可能与其父表不同。这是一个从表(不是列)中获取排序规则的查询

SELECT TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, TABLE_COLLATION
FROM INFORMATION_SCHEMA.TABLES;

【讨论】:

【参考方案3】:

将数据库中所有表的信息(状态)输出为“phpmyadmin”:

SHOW TABLE STATUS FROM your_db_name;

【讨论】:

因为它是mysql show table status中的必填参数。只是为了让你不能选择一个表,你总是需要知道它来自哪个数据库。表的名称不是唯一的,在不同的数据库中可以有同名的表。因此,为了消除歧义,有必要指定基数。【参考方案4】:

运行此命令以查看与数据库排序规则不匹配的列。如果您想在查询和条件中使用这些列,则必须使用 COLLATE 提示进行匹配。

SELECT 
     CLM.[TABLE_CATALOG]
    ,CLM.[TABLE_SCHEMA]
    ,CLM.[TABLE_NAME]
    ,CLM.[COLUMN_NAME]
    ,CASE
        WHEN CLM.[CHARACTER_MAXIMUM_LENGTH] IS NOT NULL THEN CLM.[DATA_TYPE] + '(' + CASE WHEN CLM.[CHARACTER_MAXIMUM_LENGTH] = '-1' THEN 'max' ELSE CAST(CLM.[CHARACTER_MAXIMUM_LENGTH] AS NVARCHAR(10)) END + ')'
        ELSE CLM.[DATA_TYPE]
     END AS [DATA_TYPE]
    ,CLM.[CHARACTER_SET_NAME]
    ,CLM.[COLLATION_NAME]
--  ,CLM.* 
FROM INFORMATION_SCHEMA.COLUMNS CLM (NOLOCK)
    LEFT JOIN sys.databases DBS (NOLOCK) ON CLM.[TABLE_CATALOG] = DBS.[name]
WHERE CLM.[COLLATION_NAME] IS NOT NULL AND CLM.[COLLATION_NAME] != DBS.[collation_name]

【讨论】:

以上是关于查询以显示所有表及其排序规则的主要内容,如果未能解决你的问题,请参考以下文章

sql SQL查询以查找表中的列中的重复项,从而更改列的排序规则以确保重复项检查为大小写

MySQL:错误排序规则“正在使用”并且无法加载表

表总和排序规则是 latin1_swedish_ci,但所有单独的表都显示 utf8_general_ci

基于每个查询定义排序规则

修改mysql所有表排序规则

MYSQL数据库表排序规则不一致导致联表查询,索引不起作用问题