简体   繁体   English

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

[英]Query to show all tables and their collation

Is there a query that can be run in mysql that shows all tables and their default collation?是否有可以在 mysql 中运行的查询来显示所有表及其默认排序规则? Even better if there was on that could show all collations on all columns of all tables.如果可以显示所有表的所有列上的所有排序规则,那就更好了。

SELECT TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME, COLLATION_NAME
    FROM INFORMATION_SCHEMA.COLUMNS

Bear in mind that collation can be defined to tables and also to columns. 请记住,可以将排序规则定义到表格以及列。

A column's collation might be different to its parent table. 列的排序规则可能与其父表不同。 Here is a query to get the collation from tables (not columns) 这是一个从表(而不是列)获取排序规则的查询

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

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

SHOW TABLE STATUS FROM your_db_name;

Run this to see columns that not matching database collation.运行它以查看与数据库排序规则不匹配的列。 If you want to use these columns in your query and conditions you have to use COLLATE hint to match.如果要在查询和条件中使用这些列,则必须使用 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]

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM