この投稿に続いて: POST ABOUT CONCAT 私の問題は、1つの行に多くの行CONCAT
があることです。たとえば、50文字前後の文字列を含む10行がある場合、クエリではその行のうち6〜7行のみが表示されます。スタックとグーグルで検索したところ、コマンドでCONCATの最大長を変更できることがわかりました:SET group_concat_max_len := @@max_allowed_packet
。私は何を間違っていますか?
EDIT:When i SHOW VARIABLES LIKE 'group_concat_max_len'
1024を表示します。Mysqlバージョン5.0.96-ログ。テーブルタイプ:MyISAM。制限がないようです。2000文字の単純なvarcharを選択しようとすると、問題なく表示されます。 3つのテーブルがあります:1番目-ItemIDを持つアイテム、2番目-ItemIDとDescriptionIDを持つDescriptionpack、3番目のDescriptionとDescriptionID。
Select
DISTINCT Item.ItemID as item
,GROUP_CONCAT(Description.DescriptionID) AS description
From Item
LEFT OUTER JOIN descriptionpack
on Item.ItemID=descriptionpack.ItemID
LEFT OUTER JOIN description
on descriptionpack.descriptionID=description.descriptionID
GROUP BY item
EDIT2:私は問題を見つけたと思います、私は私のプロバイダーに私の問題を言いました、そして彼らは私にこれに答えます:
ホスティングチームに質問を確認しました。その変数や他の変数のグローバル設定を変更することはできません。ただし、他のクエリの前に最初に設定することで、セッションごとにその変数を設定できるはずです。お役に立てば幸いです。
だから今問題は、それをどのように行うかです。
おそらく、単純なGROUP_CONCAT()
ではなくCONCAT()
を使用しています。
group_concat_max_len
のデフォルト値は1024です。これは、大きな長い連結を構築している場合、かなり小さな制限です。
変更するには、このコマンドを使用します。この例の長さを100,000に設定しました。必要なものに設定できます。
SET SESSION group_concat_max_len = 100000;
Max_allowed_packetの通常の値は1メガバイトであり、必要以上の値になる可能性があります。
group_concat_max_len
自体のサイズは事実上無制限です 。プラットフォームの符号なしワード長によってのみ制限されます。32ビットプラットフォームでは2 ^ 32-1、64ビットプラットフォームでは2 ^ 64-1です。
それでもアプリケーションにとって十分でない場合は、@ egyalの提案を受けて、アプローチを再考するときが来ました。
You need change group_concat_max_len default value in the bellow config file
**my.cnf file(Linux) and my.ini file(windows)**
[mysqld]//Add this line group_concat_max_len=15000 under mysqld section
group_concat_max_len=15000
Note: After change is done You need to restart your MySQL server.
my.cnf file path in linux :
1. /etc/my.cnf
2./etc/mysql/my.cnf
3.$MYSQL_HOME/my.cnf
4.[datadir]/my.cnf
5.~/.my.cnf