MySQL Определите самую длинную длину VarChar - PullRequest
8 голосов
/ 28 октября 2011

Я пытаюсь оптимизировать свою базу данных. Для этого мне нужно иметь возможность определить самую длинную запись данных в столбце 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

Ответы [ 4 ]

19 голосов
/ 28 октября 2011

Если вы хотите узнать максимальную длину поля output, например, вы можете использовать этот запрос:

SELECT Max(CHAR_LENGTH(`output`)) AS Max FROM `poller_output`
9 голосов
/ 28 октября 2011

Вы можете сделать это, используя следующий оператор

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
0 голосов
/ 16 декабря 2015

Я отправлю ответ на вопрос, который я сделал:

SELECT CHARACTER_MAXIMUM_LENGTH
FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = 'Database'
    AND TABLE_NAME = 'Table'
    AND COLUMN_NAME = 'Field'
0 голосов
/ 05 февраля 2014

Обратные тики и функция char_length в ответе Аурелио вызывают ошибки. Этот ответ работает.

...