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

推薦する

Centos7 への MySQL8 のインストールチュートリアル

MySQL 8 の新機能: MySQL をバージョン 5.x から 8.x に直接アップグレードする...

子要素の margin-top によって親要素が移動する問題の解決方法

問題の説明今日、ページ スタイルを変更していたときに、子要素にmargin-top設定したのに、子要...

Dockerコンテナイメージからコードを復元する手順

コードが失われ、コンテナ内で実行されているイメージから必要なコードを回復する必要がある場合があります...

MySQL の全体的なアーキテクチャの紹介

MySQL の全体的なアーキテクチャは、サーバー層とストレージ エンジン層に分かれています。サーバー...

MySQLが正常にインストールされたかどうかを確認する方法

MySQL をインストールした後、DOS ウィンドウまたは MySQL 5.7 コマンドライン クラ...

Element UI を使用してページにページング ナビゲーション バーを追加する方法

必要ページング バーを追加します。これにより、ページにジャンプしたり、ページ番号に従って特定のページ...

Linux の権限管理コマンド (chmod/chown/chgrp/unmask) の詳細な説明

目次chmod例権限に関する特別な注意分析するチョーンchgrp umask Linux オペレーテ...

MySQLオンラインログライブラリの移行例

最近の事例をお話ししましょう。オンライン Alibaba Cloud RDS 上のゲーム ログ ライ...

JavaScriptは検証コードと検証のランダム生成を実装します

この記事では、検証コードのランダム生成と検証を実現するためのJavaScriptの具体的なコードを参...

vue-router 履歴モード サーバー側設定プロセス記録

歴史ルート履歴モードとは、HTML5 の履歴 API を使用してクライアント側ルーティングを実装する...

Zabbix 監視ソリューション - 最新の公式バージョン 4.4 [推奨]

ザビックス2019/10/12 チェンシン参照するhttps://www.zabbix.com/do...

CSS 属性値正規マッチングセレクターの使い方 (ヒント)

属性値の正規一致セレクターには 3 つの種類があります。 [属性^="値"] [...

スクロールバーの美化効果を実現するための CSS3 のサンプル コード

具体的なコードは次のとおりです。 /*スクロールバーの幅*/ ::-webkit-スクロールバー{ ...

win10 での mysql5.7.21 の詳細なインストール手順

この記事では、MySQL 5.7.21のインストールとインストール中に発生した問題を参考までに紹介し...

Vueを使用してタイマー機能を実装する

この記事の例では、タイマー機能を実装するためのVueの具体的なコードを参考までに共有しています。具体...