MySQL最長のVarChar長の決定

私は自分のデータベースを最適化しようとしています。これを行うには、varcharカラムで最長のデータエントリを決定し、そのカラム定義をその上にトリムする必要があります。

私のテーブルで最も長いvarcharエントリの長さをsqlを使って調べるにはどうすればよいですか?

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
8

4 答え

たとえば、 output フィールドの最大長を知りたい場合は、次のクエリを使用できます。

SELECT Max(CHAR_LENGTH(`output`)) AS Max FROM `poller_output`
19
追加された
パーフェクト...まさに私が探していたもの。
追加された 著者 Jericon,
役に立つ答えはty。私は誰もがhudonsのポストを見ることをお勧めします
追加された 著者 user2426679,

次のステートメントを使用してこれを行うことができます

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
8
追加された
+1 - 私はこれがあなたのデータベースの最適化に関してより良い答えだと思います。それはあなただけの長さ以上のものを提供します。
追加された 著者 Fenton,

Aurelioの答えにおけるバックティックとchar_length関数はどちらもエラーを引き起こします。 このの回答が機能します。

3
追加された

私は私が作った質問に答えを掲示します:

SELECT CHARACTER_MAXIMUM_LENGTH
FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = 'Database'
    AND TABLE_NAME = 'Table'
    AND COLUMN_NAME = 'Field'
0
追加された