我正在尝试优化我的数据库。为此,我需要能够确定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
答案 0 :(得分:19)
例如,如果您想知道字段output
的最大长度,可以使用此查询:
SELECT Max(CHAR_LENGTH(`output`)) AS Max FROM `poller_output`
答案 1 :(得分:9)
您可以使用以下语句
执行此操作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 :(得分:0)
我将在我提出的问题中发布答案:
SELECT CHARACTER_MAXIMUM_LENGTH
FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = 'Database'
AND TABLE_NAME = 'Table'
AND COLUMN_NAME = 'Field'
答案 3 :(得分:-3)
Aurelio的答案中的后退滴答和char_length函数都会导致错误。 This回答有效。