2011-10-28 99 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'