web-dev-qa-db-ja.com

なぜ `group_concat_max_len`を最大値以下に設定するのですか?

Ubuntu 12.04上のMySQL 5.5.28

結果がgroup_concat_max_lenより長い場合、結果は正常に切り捨てられます。

現在、必要な長さを事前にチェックし、group_concat_max_lenを十分な大きさに設定するスクリプトがあります。

ただし、このチェックでは追加のクエリが追加されます。 group_concat_max_lenを最大値に設定するだけの欠点はありますか?利点は、クエリが少ないことです。

9
Buttle Butkus

MySQL BOLに従って ここ

64ビットのgroup_concat_max_lenの最大値は18446744073709551615です。

32ビットのgroup_concat_max_lenの最大値は4294967295です。

結果はgroup_concat_max_lenを含むdefault value of 1024システム変数で指定された最大長に切り捨てられます。戻り値の有効な最大長はmax_allowed_packetの値によって制約されますが、値を高く設定できます。 runtimegroup_concat_max_lenの値を変更する構文は次のとおりです。ここで、valはunsigned integerです。

SET [GLOBAL | SESSION] group_concat_max_len = val;

注:GROUP_CONCAT()関数のbytesmaximum permitted結果の長さ。デフォルトは1024です。

MySQLが文書化したブログ ここGROUP_CONCATを小さなgroup_concat_max_len設定で使用していますか?結果はsilently truncatedになります(ただし、警告を確認してください)。

@Shlomi Noachここgroup_concat_max_lenによるMySQLブログとして:このパラメーターは、GROUP_CONCAT連結結果のmaximumテキスト長を制限します。デフォルトは1024です。これは非常に低い値だと思います。最近、GROUP_CONCATを使用して、そうでなければ難しい問題を解決してきました。そして、ほとんどの場合、1024too lowであり、結果として silent (Argh!)が切り捨てられ、不正な結果が返されました。このパラメータの最大値はmax_packet_sizeによって制限されることを知るのは興味深いことです。したがって、このパラメーターは完全に削除し、max_packet_sizeとしてonly limitationlimitationを指定することをお勧めします。それ以外の場合は、very large default valueをいくつかの順序でMBにしたいと思います。

さらにあなたの参照 ここここ

2

私はこの質問が少し古くなったことに感謝しますが、誰かがそれを見つけて疑問に思っている場合、最大値(またはその他の非常に大きな値)を設定することの1つの欠点は、group_concatがvarcharではなくblobを返すことができることです。提案 elsewhere group_concat_max_lenを512に設定して、常にblobではなくvarcharを返すようにするとします。必要に応じて、charにキャストする傾向があります。

2
Peter