【问题标题】:MySQL Determine longest VarChar lengthMySQL确定最长的VarChar长度
【发布时间】:2011-12-17 04:05:19
【问题描述】:

我正在尝试优化我的数据库。为此,我需要能够确定 varchar 列中最长的数据条目,然后将列定义修剪到刚好高于该值。

如何使用 sql 找出表中最长的 varchar 条目的长度?

CREATE TABLE `poller_output` (
  `local_data_id` mediumint(8) unsigned NOT NULL DEFAULT '0',
  `rrd_name` varchar(19) NOT NULL DEFAULT '',
  `time` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
  `output` varchar(200) NOT NULL DEFAULT '',
  PRIMARY KEY (`local_data_id`,`rrd_name`,`time`)
) ENGINE=MEMORY DEFAULT CHARSET=utf8

【问题讨论】:

    标签: mysql varchar


    【解决方案1】:

    如果你想知道字段output的最大长度,例如,你可以使用这个查询:

    SELECT Max(CHAR_LENGTH(`output`)) AS Max FROM `poller_output`
    

    【讨论】:

    • 完美……正是我想要的。
    • 提供有用的答案;建议大家也看看hudons的帖子
    【解决方案2】:

    您可以使用以下语句来做到这一点

    SELECT column_name FROM database.table PROCEDURE ANALYSE(1,1);
    

    此结果的 Max_length 值将为您提供该列中最长的 varchar。

    所以在这种情况下,假设您要调查输出列,那么您可以运行以下命令

    SELECT output FROM poller_output PROCEDURE ANALYSE(1,1);
    

    这样做的好处是它还会为您提供返回值中的最佳字段类型,这将类似于

    VARCHAR(56) NOT NULL
    

    【讨论】:

    • +1 - 我认为这是优化数据库的更好答案。它给你的不仅仅是长度。
    【解决方案3】:

    我将在我提出的问题中发布答案:

    SELECT CHARACTER_MAXIMUM_LENGTH
    FROM information_schema.COLUMNS
    WHERE TABLE_SCHEMA = 'Database'
        AND TABLE_NAME = 'Table'
        AND COLUMN_NAME = 'Field'
    

    【讨论】:

      【解决方案4】:

      Aurelio 的答案中的反引号和 char_length 函数都会导致错误。 This 回答有效。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-02-15
        • 1970-01-01
        • 2011-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-02-08
        • 2016-09-14
        相关资源
        最近更新 更多