查询以显示所有表及其排序规则
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查询以查找表中的列中的重复项,从而更改列的排序规则以确保重复项检查为大小写