web-dev-qa-db-ja.com

MYSQL CONCAT MAX LENGTH

この投稿に続いて: 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:私は問題を見つけたと思います、私は私のプロバイダーに私の問題を言いました、そして彼らは私にこれに答えます:

ホスティングチームに質問を確認しました。その変数や他の変数のグローバル設定を変更することはできません。ただし、他のクエリの前に最初に設定することで、セッションごとにその変数を設定できるはずです。お役に立てば幸いです。

だから今問題は、それをどのように行うかです。

10
Crackeraki

おそらく、単純なGROUP_CONCAT()ではなくCONCAT()を使用しています。

group_concat_max_lenのデフォルト値は1024です。これは、大きな長い連結を構築している場合、かなり小さな制限です。

変更するには、このコマンドを使用します。この例の長さを100,000に設定しました。必要なものに設定できます。

 SET SESSION group_concat_max_len = 100000;

Max_allowed_pa​​cketの通常の値は1メガバイトであり、必要以上の値になる可能性があります。

group_concat_max_len自体のサイズは事実上無制限です 。プラットフォームの符号なしワード長によってのみ制限されます。32ビットプラットフォームでは2 ^ 32-1、64ビットプラットフォームでは2 ^ 64-1です。

それでもアプリケーションにとって十分でない場合は、@ egyalの提案を受けて、アプローチを再考するときが来ました。

27
O. Jones
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  
1
Reena Mori