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

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

【问题讨论】:

    标签: mysql schema collation


    【解决方案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]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-04-26
        • 1970-01-01
        • 2014-03-02
        • 2016-11-10
        • 1970-01-01
        • 2013-05-10
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多