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 コマンド sort、uniq、tr ツールの詳細な説明

並べ替えツールLinux の sort コマンドは、テキスト ファイルの内容を並べ替えるために使用さ...

非常に実用的なTomcat起動スクリプトの実装方法

序文セキュリティ上の理由から、会社が Linux サーバーへのすべてのログインにセキュリティ制限を課...

CSSはインラインブロックのずれの問題を解決します

もうナンセンスじゃない、郵便番号HTML部分 <div class="positio...

MySQL シリーズ: redo ログ、undo ログ、binlog の詳細な説明

取引の実施REDO ログはトランザクションの永続性を保証し、UNDO ログはトランザクションのロール...

カーソル ループを使用して、MySQL ストアド プロシージャで一時テーブルを読み取る

カーソルカーソルは、結果セット内のデータを表示または処理するために使用される方法です。カーソルを使用...

JavaScript は最大値と最小値のアルゴリズムを通じて AI 三目並べゲームを実装します

では、早速スクリーンショットを実行してみましょう。黒い駒はプレイヤーの位置、赤い駒はコンピュータの位...

JavaScript による Web ページ カルーセルの超詳細な実装

目次HTML ページの作成js部分の機能を実装する1. 左ボタンと右ボタン2. 小さな円を動的に生成...

Javascript の奇妙な点をご存知ですか?

私たちのベテランの先人たちは、数え切れないほどのコードを書き、数え切れないほどの落とし穴に陥ってきま...

Vueはランニングライトのシンプルな効果を実現

この記事では、マーキーのシンプルな効果を実現するためのVueの具体的なコードを参考までに共有します。...

SQL でテーブルにフィールドとコメントを追加する方法

1. フィールドを追加します。 alter table テーブル名 ADD フィールド名 タイプ;例...

MySQLは現在の日付と時刻を取得する関数

現在の日付 + 時刻 (日付 + 時刻) を取得する関数: now() mysql> now(...

MySQL で指定した桁数の乱数を生成する方法と、バッチで乱数を生成する方法

1. まず、よく使われるMySQL関数をいくつか紹介しますRAND() は 0 から 1 (0<...

jsオブジェクト指向カプセル化カスケードドロップダウンメニューリストの実装手順

この例で開発されたカスケード ドロップダウン メニューは、既存の JSON データに基づいて作成され...