Mysql5.7 のグループ連結関数を使用するときにデータが切り捨てられる問題に対する完璧な解決策

Mysql5.7 のグループ連結関数を使用するときにデータが切り捨てられる問題に対する完璧な解決策

一昨日、本番環境でGROUP_CONCAT関数を使用して選択したデータが切り捨てられ、最大長が1024バイトを超えないという問題が発生しました。最初は、フィールド長を制限しているNavicatクライアント自体の問題だと思いました。その後、意図的に 1024 バイトを超える長さのフィールドを再度 INSERT しましたが、Navicat では完全に表示できたため、Navicat の問題は除外されました。

そこで、おなじみの数字 1024 を思い浮かべました。MySQL からソケット経由で送信されたデータを受信するときに、C++ フレームワークが処理されたのでしょうか?そこで、このフィールドを手動でログに出力したところ、データ長が 1024 バイトを超えていても、完全に表示できることがわかりました。

1. 原因を見つける

この時点では、SQL ステートメントからのみ開始できます。 GROUP_CONCAT データの切り捨てに関する質問をオンラインで検索したところ、回答はすべて group_concat_max_len パラメータを指しており、そのデフォルト値はちょうど 1024 でした。次のコマンドを使用して、このデフォルト値をデータベースで直接表示できます。

mysql> 'group_concat_max_len' のような変数を表示します。
+----------------------+-------+
| 変数名 | 値 |
+----------------------+-------+
| グループ連結最大長 | 1024 |
+----------------------+-------+
セット内の 1 行 (0.00 秒)
マイSQL>

MySQL 公式マニュアルでは、 GROUP_CONCAT The maximum permitted result length in bytes for the GROUP_CONCAT() function

2. 問題解決

group_concat_max_len最大値に調整するだけです。公式の MySQL 5.7 マニュアルには、次の定義が記載されています。

BZ のテスト仮想マシン MySQL5.7.19 は 64 ビットなので、次の 2 つの方法で group_concat_max_len を最大値に設定できます。

#### 方法1: MySQL設定ファイルmy.cnfを変更し、[mysqld]ノードにgroup_concat_max_len = 18446744073709551615を追加します
#### 方法2: コンソールを直接設定してすぐに有効にする -- [必要な操作] グローバル構成を変更する ----
グローバル group_concat_max_len=18446744073709551615 を設定します。
-- [オプション操作] 現在のセッションで設定をすぐに有効にします。設定を有効にするには、ログインしている他のセッション端末を再起動する必要があります。
セッションgroup_concat_max_len=18446744073709551615を設定します。

3 テスト結果

ここでは 2 番目の方法を使用します。SELECT SELECT LENGTH(GROUP_CONCAT(Fremark)) FROM account;を実行し、結果を比較すると、MySQL 5.7 でGROUP_CONCATを使用した場合のデータの切り捨ての問題が正常に解決されていることがわかります。

要約する

上記は、Mysql5.7 でグループ連結関数を使用するときに発生するデータ切り捨ての問題に対する完璧な解決策です。お役に立てれば幸いです。ご質問がある場合は、メッセージを残していただければ、すぐに返信いたします。また、123WORDPRESS.COM ウェブサイトをサポートしてくださっている皆様にも感謝申し上げます。

以下もご興味があるかもしれません:
  • Mysql で group_concat の長さ制限を変更する方法
  • MySQLのgroup_concat()関数のソート方法についての簡単な説明
  • mysql group_concat() 関数の使用法の概要
  • MySQL 統計関数 GROUP_CONCAT の使用における落とし穴の分析
  • mysqlはgroup_concat()を使用して複数行のデータを1行に結合します。
  • MySQLのgroup_concat関数の詳細な理解
  • Mysql GROUP_CONCAT() 関数の使い方
  • MySQLはgroup_concat()関数に基づいて複数のデータ行を結合します

<<:  JavaScript におけるセミコロンの詳細

>>:  Apache Spark 2.0ジョブは完了するまでに長い時間がかかります

推薦する

MySQL分離の使用手順を読む

現在のトランザクションはどの履歴バージョンを読み取ることができますか?読み取りビューは、トランザクシ...

Linux ネットワークプログラミング機能の簡単な分析

目次1.ソケットを作成する2. ソケットをバインドする3. 聞き手を作る。聞く4. 接続が受け入れら...

HTML 特殊文字変換表

キャラクター小数点文字番号エンティティ名---未使用空間---スペースバー! ! ---感嘆符「 」...

WeChatアプレットはふるいを振る効果を実現

この記事では、WeChatアプレットの具体的なコードを参考までに共有します。具体的な内容は次のとおり...

上下に空白行があるフォームを挿入する解決策

ウェブページを作成するときに、フォームを挿入した後、フォームの上下に空白行が表示されることがよくあり...

Web 上の要素を非表示にする方法とその利点と欠点

ソースコードの例: https://codepen.io/shadeed/pen/03caf6b36...

Jsonフォーマットの詳細な説明

目次JSON は次の 2 つの構造に基づいて構築されます。 2. JSON形式1. オブジェクト2....

Vue における v-model を使用したクロスコンポーネントバインディングの基本的な実装方法

みなさんこんにちは。今日はv-modelを使って親子コンポーネントのバインディング効果を実現する方法...

Webデザインチュートリアル(5):Webビジュアルデザイン

<br />前回の記事:Webデザイン講座(4):素材と表現について Webデザイン上級...

Electronで不規則な形状の透明部分をクリックする実装

目次不規則なフォームの実装透明な部分をクリックする不規則なフォームの実装ここでは円形フォームを実装し...

jQueryのanimateアニメーションメソッドとアニメーションキューイング問題の解決方法の詳しい説明

目次animate() アニメーションメソッドアニメーションキューイングdelay() メソッドアニ...

MySQLからClickHouseに移行する5つの方法

データ移行は、MySQL から ClickHouse にインポートする必要があります。概要プランは以...

WeChatミニプログラムは同時通訳を利用して音声認識を実装します

私は同時通訳音声認識機能を使用して、WeChatアプレットのホームページの音声検索機能を実現しました...

Docker のポート解放失敗の解決策

今日、非常に奇妙な状況に遭遇しました。docker イメージを更新した後、docker-compos...

Linux での Apache サービスの展開と構成

目次1 Apacheの役割2 Apacheのインストール3. Apacheを有効にする4 Apach...