MySQLはgroup_concat_max_lenのデフォルト値を変更します

1 はじめに

最近、組織とその下位組織に対して再帰クエリを実行したときに、データ クエリが不完全で、サブ組織のデータを取得できないことがわかりました。調査の結果、group_concat_max_len の長さが不足していることが判明しました (デフォルトでは group_concat_max_len=1024 であるため、このデフォルトのパラメータを変更する必要があります)。

2.SQL文

組織とその下位組織を再帰的にクエリする SQL ステートメントは次のとおりです。

SELECT t3.id,
        t3.fatherId,
        t3.orgName
        FROM(
					SELECT @pids as ids,
					(
						SELECT @pids := GROUP_CONCAT(id)
						FROM organizationInfo
							WHERE FIND_IN_SET(fatherId, @pids)
					) as t1, @l := @l+1 as lNum
					FROM organizationInfo, (SELECT @pids := '查询的组织ID', @l := 0 ) t4
							WHERE @pids IS NOT NULL
					) t2, organizationInfo t3
        WHERE FIND_IN_SET(t3.id, t2.ids)
        ORDER BY lNum, id

3. group_concat_max_len の長さを問い合わせる

SQL文を実行します

show VARIABLES like 'group_concat_max_len'

4. group_concat_max_len の長さを変更する

4.1. 一時的な変更

set SESSION GROUP_CONCAT_max_len=102400

このコマンドを使用して group_concat_max_len の長さを一時的に変更できますが、この変更はこの接続に対してのみ有効であるため、これは解決策ではありません。

4.2. MySQL 設定ファイルの変更

永続的に有効にするには、MySQL 構成ファイルを変更する必要があります。ここでは Ubuntu を例に挙げます。

コマンドを実行して構成ファイルを変更します。

sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf

[mysqld] の下に次の行を追加します。

group_concat_max_len = 102400

 需要を満たすために必要なバイト数がわからない場合があります。この場合、最大バイト数を設定しない (つまり、最大バイト数を使用する) ことを検討できます。これを次のように変更します。

group_concat_max_len=-1

最後に、コマンドを実行してmysqlを再起動します。

sudo service mysql restart

おすすめ

転載: blog.csdn.net/qq_17486399/article/details/131790265