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ジョブは完了するまでに長い時間がかかります

推薦する

HTML で相対パスを使用してディレクトリのすべてのレベルのファイルを取得する方法の詳細な説明

相対パスの概念現在のファイルの場所を参照ポイントとして使用して、ターゲット ファイルへのパスを確立し...

CSS 配送先住所平行四辺形線スタイルの例コード

コードは次のようになります。 // 配送先住所の平行四辺形の線のスタイル <view clas...

mysql5.7.18のインストールと初期パスワードの変更方法

CentosでのMySQLのインストールについては、以前の記事を参照してください。 Centos7....

よく使われるCSSスタイル(レイアウト)の詳しい説明

新しいCSS3プロパティと互換性ありCSS3では、プラグインprefixfree.min.jsを使用...

CentOS7.6にMYSQL8.0をインストールする詳細な手順

1. 一般的に、CentOS では mariadb がデフォルトでインストールされているため、まず ...

CMD で MySQL データベースを操作するときに中国語の文字化けが発生する問題の解決方法

Baiduで検索しました。 。 chcp コマンドを使用して、cmd の文字エンコーディングを 65...

Dockerに証明書を追加する方法

1. アップグレードプロセス: sudo apt-get updateパッケージが見つからない、パッ...

CSSアニメーションに基づくSVGボタンのサンプルコード

具体的なコードは次のとおりです。 <a href="#"> <...

JavaScript を使用して文字列内の最も繰り返しの多い文字を取得する方法

目次トピック分析する使用目的解決:コードは次のように実装されます。分析:配列とポインタ解決:コードは...

Vue プロジェクトで垂直テーブルを 2 つの方法で実装するアイデアの分析

問題の説明私たちのプロジェクトでは、水平方向のテーブルが一般的ですが、必要に応じて垂直方向のテーブル...

シンプルなカルーセル効果を実現するネイティブ js

この記事では、シンプルなカルーセル効果を実現するためのjsの具体的なコードを参考までに紹介します。具...

Dockerを使用してプライベートGitLabを構築する2つの方法

最初の方法: docker インストール1. オープンソース版のイメージを取得する2. 対応するデー...

MySQLでストアドプロシージャをデバッグする最も簡単な方法

同僚から、一時テーブルを使用して変数データを挿入して表示する方法を教わったことがありますが、この方法...

Web デザイナーにはどのような知識体系が必要ですか?

製品設計者は、複雑で大規模な製造システムと多様な市場に直面しているため、知識体系には幅広さと深さの両...

Docker がポート 2375 を公開し、サーバー攻撃を引き起こす問題と解決策

docker リモート API を学習した学生であれば、ポート 2375 についてよくご存知だと思い...