41から始めました

文字通り41歳から始めたブログです。DB(MySQL)を使ってお仕事してるので、DB周りの話を中心に最近始めたこととかをTwitterのノリで書いています。なお、本サイトにおいて示されている見解は私個人の見解であり、所属団体や組織を代表するものではありません。

【小ネタ】group_cancatで文字列が途中で切れた時

mysqlにgroup_concatという便利な関数がある

MySQL :: MySQL 5.6 リファレンスマニュアル :: 12.19.1 GROUP BY (集約) 関数 を見てもらうと分かるが、group by で取得できる値を1つのカラムに連結して表示できる。 資料作ったりするのによく使う。

関数の中でDISTINCTやORDER BYも使える。

本題(連結文字列が途中で切れる)

そういう場合に、前述の公式にも書かれているが、以下のパラメータを設定する。

SET [GLOBAL | SESSION] group_concat_max_len = val; GLOVALで設定すると、今の起動インスタンス上全体に反映する。

MySQL5.7ではデフォルト値1024だったので、1024文字を超えた時点で切り捨てられる。 これを10000とかにしておけばいいだけ。

SET group_concat_max_len = 100000;

全体に影響しないようにするにはglobalを入れないでおく(明示的にsession を入れてもいい)。