MySQL で指定エンコーディングを実装する際の落とし穴について

MySQL で指定エンコーディングを実装する際の落とし穴について

前面に書かれた

環境: MySQL 5.7+、MySQL データベースの文字エンコードは utf8、テーブルも utf8

シナリオ: WeChat はユーザー情報 (ニックネームを含む) の取得を許可し、データベースに保存します。一部のユーザーは成功しますが、少数のユーザーは失敗します。

それで、なぜ失敗したのでしょうか?

エラーログを貼り付ける

行 1 の列 'nickname' の文字列値が正しくありません: '\xF0\x9F\x98\x98\xF0\x9F...'

これは、失敗したユーザーの WeChat ニックネームに絵文字記号が含まれているためです。

分析:

MySQL は、UTF-8、GB2312、GBK などの複数の文字エンコード セットをサポートしています。

SHOW CHARSET コマンドで表示できます。

通常、デフォルトの文字エンコードとして UTF-8 を使用することをお勧めします。

上の図から、MySQL データベースには 2 セットの UTF-8 エンコーディング実装があることがわかります。

  • utf8: utf8 エンコーディングは最大 3 バイトまでしかサポートしません。 UTF8 エンコードでは、中国語の文字は 3 バイトを占め、その他の英語の文字、数字、記号はすべて 1 バイトを占めます。ただし、絵文字記号は 4 バイトを占有し、一部の複雑なテキストや繁体字中国語の文字も 4 バイトを占有します。
  • utf8mb4: UTF-8 エンコーディングの完全な実装。最大 4 バイトをサポートしているため、絵文字記号の保存に使用できます。

情報、公式の説明を確認してください:

やっと

ヒント: 絵文字記号を保存する必要があるフィールドがある場合は、エンコードを utf8mb4 として指定することを忘れないでください。

MySQL 指定エンコーディングの実装における小さな落とし穴についての記事はこれで終わりです。MySQL 指定エンコーディングに関するより関連性の高いコンテンツについては、123WORDPRESS.COM の過去の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • MYSQLストアドプロシージャコメントの詳細な説明
  • MySQL インデックス データ構造の詳細な分析
  • MySQL データベースの必須条件クエリ ステートメント
  • MySQLデータベースのタイムアウト設定を構成する方法の例
  • Mysqlサーバーのインストール、構成、起動、シャットダウン方法の詳細な説明

<<:  React スキャフォールディングの構築方法を学ぶ

>>:  Dapr を使用してマイクロサービスをゼロから簡素化する例

推薦する

uni-app で scss を使用するサンプル コード

遭遇した落とし穴私は午後中ずっと、uni-app で scss を使用する際の落とし穴を解決すること...

大規模な Vue.js プロジェクトの構築と維持のための 10 のベスト プラクティス

目次1. スロットを使用してコンポーネントを理解しやすくし、より強力にする2. Vuexストアを正し...

Linuxでホスト名を変更する方法

1. 現在のホスト名を表示する [root@fangjian ~]# ホスト名ctl 静的ホスト名:...

CSS3はさまざまな境界効果を実現します

半透明の境界線結果: 実装コード: <div> 半透明の境界線が見えますか? </...

Linux での scp および sftp コマンドの詳細な説明

目次序文1. SCPの使用法2. sftpを使用する3. scp と sftp の違いは何ですか?ど...

MySQL 5.7を完全にアンインストールするための詳細な手順

この記事は主に、MySQLを再インストールする際のクリーンでないアンインストールのさまざまな問題をま...

Docker に MySQL をデプロイする例

目次1 コンテナクラウドとは何ですか? 2 Dockerの紹介3 dockerを使ってMySQLをイ...

Windows 環境での MYSQL5.7 設定ファイルの場所のグラフィカル分析

1. MYSQLインストールディレクトリ次のようにコードをコピーします。 select @@bas...

nginx でクロスドメイン障害修復を構成する方法の例

Nginxのクロスドメイン設定は次のようには機能しません サーバー{ 聞く 80; server_n...

Debian 9 システムに MySQL データベースをインストールする方法

序文タイトルを見ると、誰もが「Debian 9 に MySQL をインストールするにはどうすればいい...

CSS 境界線の半分または部分的に表示される実装コード

1. 疑似クラスを使用して境界線の半分を表示する <!DOCTYPE html> <...

Reactコンポーネント通信の詳細な説明

目次コンポーネント通信の概要コンテンツ3つの方法まとめコンポーネントコミュニケーション - 父から息...

CSS はコンテナ レベル (div...) タグを 1 つの位置 (ページの右端) に固定します。

コードは次のようになります。 。プロセス{ 境界線:1px 実線 #B7B7B8; 背景:#F8F8...

MySQLデータベースの数千万件のデータクエリとストレージの詳細な説明

目次百万レベルのデータ処理ソリューションデータストレージ構造設計クエリステートメントの最適化1000...

Vueはアップロードコンポーネントを実装します

目次1. はじめに2. アイデアファイルをアップロードする2つの方法3. ライフサイクル4. コード...