MySQLデータ内の多数の改行と復帰に対する解決策

MySQLデータ内の多数の改行と復帰に対する解決策

問題を見つける

今朝、クライアントから電話があり、「シャオ・チェン、昨夜データベースに何十万ものデータをインポートしたのですが、Webインターフェースではほとんど見つかりませんでした。あなたのシステムって一体何なの?バグだらけ!デボデボデ…」(2,000語省略)と言われ、いつものように私たちのプロジェクトがクソだと批判されました~~

はいはい、お客さんが何をスプレーしても構いません、私は朝食として扱います 🙂🙂🙂🙂 ゲップ~ んー、すごくお腹いっぱいです;

会社に到着後、まずはお客様から頂いたエラー例(見つけられなかった)をテストし、昨日のデータに問題がないか確認しました。昨日お客様がExcelで取り込んだデータには\r\nなどの改行や復帰が多く含まれているのが分かりました。

たとえば、データベース内のデータが「line break\nline break\nline break」であり、次の SQL クエリがインターフェイスで使用されている場合、当然ながら見つけることはできません。

`LOL` から * を SELECT * します。name は 'newline newline newline' です。

改行文字: CHAR(10) = "\n"

復帰文字: CHAR(13) = "\r"

MySQL では、復帰文字と改行文字はどちらも char 型です。varchar に配置すると、navcat などのプラグインでは表示されません。mysql ターミナルと navcat を比較して確認する必要があります (落とし穴~)

navcat プラグインは以下を表示します。

ここに画像の説明を挿入

MySQL ターミナルには次のように表示されます。

(改行文字 \r によってデータ結果が直接返され、その一部しか表示されませんでした。MySQL さん、あなたについて何を言えばいいでしょうか? 😰😰)

mysql> `LOL` から * を選択します。
+----+------------------------------+-----------+-------+
| id | ヒーロータイトル | ヒーロー名 | 価格 |
+----+------------------------------+-----------+-------+
| 1 | DBlade Shadow | タロン | 6300 |
| 2 | X-Swift スカウト | ティーモ | 6300 |
| 8 | 改行 改行 改行| 改行| 450 |
キャリッジリターン | キャリッジリターン | 450 |
+----+------------------------------+-----------+-------+
セット内の 4 行 (0.00 秒)

1. 改行と復帰を削除する方法

条件が許せば、次のようにステートメントを通じて直接改行文字と復帰文字をクリアすることをお勧めします。

「hero_title」列のすべての改行を削除します (次のいずれかの方法で実行できます)。

-- 「hero_title」列のすべての改行を削除します(次のいずれかの方法で機能します)
`LOL` を更新します。hero_title を REPLACE(hero_title, '\n', '') に設定します。
`LOL` を更新します。hero_title を REPLACE(hero_title, char(10), '') に設定します。

– 「hero_title」列からすべての改行を削除します(次のいずれかの方法で実行できます)

-- "hero_title" 列からすべての改行を削除します。 update `LOL` set hero_title = REPLACE(hero_title, '\r', '');
`LOL` を更新します。hero_title を REPLACE(hero_title, char(13), '') に設定します。

2. SELECTクエリで「改行と復帰」を無視する方法

たとえば、条件が許さない場合、顧客は「非常に興奮して」あなたに向かって「カリーのデータに触れることはできません!」と叫びます。 …笑っちゃった〜

ではどうすればいいのでしょうか? SQL を変更することで改行や復帰を除外できますが、これはクエリの効率にある程度影響し、ご存知のとおり、多くのコードを変更する必要があります。

魯迅氏の言葉を思い出してください。「抑圧があるところには、抵抗がなければならない」

次に例を示します。

-- 改行を無視するクエリ SELECT * from `LOL` where REPLACE(hero_title, char(10), '') = 'line break line break line break';
-- 復帰文字クエリを無視します。SELECT * from `LOL` where REPLACE(hero_title, char(13), '') = '復帰文字 復帰文字 復帰文字';
-- 改行と復帰は無視します。SELECT * from `LOL` where REPLACE(REPLACE(hero_title, char(13), ''), char(10), '') = '復帰 復帰 復帰 復帰';

3. 体験のまとめ

同様のシンボルは、通常、データベースに入力するときに消去する必要があります。保持する必要がある場合は、他のカスタム識別子 (自分で作成した一意の識別子など。私はこれを「大きな目が小さな目を睨む: o_O」と呼んでいます) に置き換え、インデックス作成の効率に影響を与えないようにバックグラウンド プログラムで置き換えを行うことをお勧めします。

さて、この記事がお役に立てば幸いです。同僚がこの問題に遭遇したときに、この記事をマークして同僚の顔に突きつけてみてはいかがでしょうか。

これで、MySQL データ内の改行や復帰が多い問題を解決する方法についての記事は終了です。MySQL の改行や復帰の詳細については、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • MySQL データベースの改行とテキストエリアの改行についての簡単な説明

<<:  Excel エクスポートは docker 環境では常に失敗する

>>:  Vue3.0 でページング コンポーネントを手動でカプセル化する方法

推薦する

MySQL 8.0 の非表示インデックスの詳細な説明

言葉MySQL 8.0 は最初のバージョンから 4 年を経てリリースされました。バージョン 8.0 ...

MySQL 8.0.22 の最新バージョンのダウンロードとインストールの超詳細なチュートリアル (Windows 64 ビット)

目次序文1. 公式サイトからMySQL 8.0.22をダウンロードする2. 環境変数を設定する3. ...

我々は自らの力でIE6を絶滅に追い込んでいる

実際、IE6 が本当にいつ消滅するのか私たちは毎日疑問に思っていますが、2001 年のリリース以来、...

Vue でのカスタムディレクティブの基本的な使用方法

目次序文文章1. グローバル登録2. 部分登録3. フック機能とパラメータ設定4. 柔軟な使い方(1...

MySQLクエリ最適化に必須の知識ポイントのまとめ

序文クエリの最適化は一夜にして達成できるものではありません。対応するツールの使い方を学び、他の人の経...

js でシンプルなタブを実装する

タブ選択カードは、実際の Web ページで非常に頻繁に使用されます。基本的に、すべての Web ペー...

Alibaba Cloud で静的ウェブサイトを素早く構築する方法

序文:ジュニアプログラマーとして、私は自分自身の個人ウェブサイトを構築し、それを他の人に見せることを...

CSS が複数のクラスに一致する方法のサンプルコード

CSSは複数のクラスにマッチする次の HTML タグ li、クラスはオープン スタイルです。私の要件...

ページ切り替え効果を実現するJSコード

この記事の例では、ページ切り替え効果を実現するためのJSコードの具体的なコードを参考までに共有してい...

Vue ページレンダリングにおけるキーの適用例チュートリアル

導入フロントエンドプロジェクトの開発プロセスでは、el-table によって表示される結果列がコンポ...

Dockerfileの指示と基本構造の説明

Dockerfile を使用すると、ユーザーはカスタム イメージを作成できます。基本構造Docker...

js配列forEachインスタンスの詳細な使用方法

1. forEach() は map() に似ています。これも渡された関数に各要素を順番に適用します...

Dockerコンテナ内でホストDocker操作を呼び出して実行する

まず、この投稿は Docker 初心者向けです。もちろん、ベテランであれば記事中の分割線以降の操作方...

SSHのssh-keygenコマンドの基本的な使い方の詳細な説明

SSH 公開鍵認証は、SSH 認証方式の 1 つです。 SSH パスワードフリーのログインは公開鍵認...

MySQLパーティションテーブルは月別に分類されています

目次テーブルを作成するデータベース ファイルを表示します。入れるクエリ消去補足:Mysqlは月テーブ...