【发布时间】:2011-06-24 07:37:03
【问题描述】:
是否有可以在 mysql 中运行的查询来显示所有表及其默认排序规则?如果有 on 可以显示所有表的所有列上的所有排序规则,那就更好了。
【问题讨论】:
是否有可以在 mysql 中运行的查询来显示所有表及其默认排序规则?如果有 on 可以显示所有表的所有列上的所有排序规则,那就更好了。
【问题讨论】:
SELECT TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME, COLLATION_NAME
FROM INFORMATION_SCHEMA.COLUMNS
【讨论】:
请记住,排序规则可以定义到表和列。
列的排序规则可能与其父表不同。这是一个从表(不是列)中获取排序规则的查询
SELECT TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, TABLE_COLLATION
FROM INFORMATION_SCHEMA.TABLES;
【讨论】:
将数据库中所有表的信息(状态)输出为“phpmyadmin”:
SHOW TABLE STATUS FROM your_db_name;
【讨论】:
运行此命令以查看与数据库排序规则不匹配的列。如果您想在查询和条件中使用这些列,则必须使用 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]
【讨论】: