2011-10-28 152 views
8

我想优化我的数据库。为了做到这一点,我需要能够确定varchar列中最长的数据条目,然后将列定义修剪到高于此位置的位置。MySQL确定最长的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 

回答

18

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

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

完美的......正是我一直在寻找。 – Jericon

+0

ty为有用的答案;我建议大家也看到hudons的帖子 – user2426679

8

你可以用下面的语句

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 
+2

+1 - 我认为这是在优化数据库方面更好的答案。它给你的不仅仅是长度。 – Fenton

-3

背面蜱线和奥雷利奥的回答CHAR_LENGTH函数都导致错误的东西。 This答案有效。

0

我将张贴在我提出的问题的答案:

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