MySQLに絵文字表現を挿入する方法

MySQLに絵文字表現を挿入する方法

序文

今日、オープンソース プロジェクトのフィードバック フォームを設計していたところ、絵文字表現を挿入できないという問題に遭遇しました。オンラインで多くの解決策を探しましたが、答えはさまざまで、うまくいくものは見つかりませんでした。

苦労の末、ようやく絵文字表現を挿入することができました。この記事では実装のプロセスを紹介します。興味のある開発者の方はぜひ読んでみてください。

前面に書かれた

私のサーバーは Mac システムで、MySQL は brew を使用してインストールされています。実際の状況に応じて、Windows/Linux では設定ファイルの場所が若干異なる場合があります。

まずエラーメッセージを見てみましょう:

chat_system> UPDATE chat_system.feedback t SET t.comments = 'フィードバック情報テスト😂' WHERE t.id = 1
[2020-12-01 21:36:08] [HY000][1366] 行 1 の列 'comments' の文字列値 '\xF0\x9F\x98\x82' が正しくありません
[2020-12-01 21:36:08] [HY000][1366] 行 1 の列 'comments' の文字列値 '\xF0\x9F\x98\x82' が正しくありません

実装のアイデア

データベースはデフォルトで UTF-8 エンコード形式を使用しているため、通常の文字列は 3 バイト、絵文字は 4 バイトを占めます。現時点では、UTF-8 では不十分です。utf8mb4 文字セットを使用すると、この問題を解決できます。

注意: utf8mb4 文字セットでは、データベース バージョンが 5.5.3 以降である必要があります。

したがって、私たちがしなければならないことは次のとおりです。

  • mysql設定ファイルを変更し、エンコード形式を設定する
  • データベースの文字セットのエンコードを変更する
  • データベーステーブルの文字セットエンコーディングを変更する

実装プロセス

MySQL が設定を読み取るデフォルトの順序は、/etc/my.cnf、/etc/mysql/my.cnf、/usr/local/etc/my.cnf、~/.my.cnf です。これらの設定ファイルが対応するディレクトリに存在しない場合は、新しいファイルを作成する必要があります。

  • データベース設定ファイルmy.cnfを変更します。ファイルの場所は/usr/local/etcです。次のコードを追加します。
[mysqld]
文字セットサーバー = utf8mb4
照合サーバー = utf8mb4_unicode_ci
init_connect = '名前をutf8mb4に設定'
文字セットクライアントハンドシェイク = false
[クライアント]
デフォルトの文字セット=utf8mb4
[mysql]
デフォルトの文字セット=utf8mb4

  • データベースの文字セットのエンコーディングを変更し、MySQL にログインした後、次の SQL ステートメントを実行します。
# データベースの文字セット エンコーディングを設定します。chat_system は実際の状況に応じたデータベース名です。ALTER DATABASE chat_system CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
  • データベース テーブルの文字セット エンコーディングを変更し、MySQL にログインした後、次の SQL ステートメントを実行します。
# データベース テーブルの文字セット エンコーディングを設定します。chat_system.feedback_comment_reply は、データベース内の対応するテーブル名です。ALTER TABLE chat_system.feedback_comment_reply CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

上記の操作が完了したら、変更が成功したかどうかを確認しましょう。MySQL にログインし、次の SQL ステートメントを実行します。

SHOW VARIABLES WHERE Variable_name LIKE 'character%' OR Variable_name LIKE 'collat​​ion%';

従属情報が表示されれば修正が完了したことになります。

テストケース

絵文字表現を挿入してテストしてみましょう。

UPDATE chat_system.feedback t SET t.comments = 'フィードバック情報テスト😂' WHERE t.id = 1;

以下に示すように、エラーは報告されず、挿入は成功します。

dataGrap を使用して、データベース テーブルのデータを表示します。以下に示すように、? が表示されています。これは、ソフトウェアがデータを認識できないことを意味します。

論理的に言えば、挿入は成功するはずです。Postman リクエスト インターフェイスで試してみると、正常に表示されます 😄。

上記は、MySQL に Emoji 絵文字を挿入する方法の詳細です。MySQL に Emoji 絵文字を挿入する方法の詳細については、123WORDPRESS.COM の他の関連記事に注目してください。

以下もご興味があるかもしれません:
  • MySQLに絵文字表現を保存する詳細な手順
  • MySQL で絵文字表現を挿入できない理由と解決策
  • MySQL が絵文字表現を保存できない問題の解決策の分析
  • MySQL の絵文字テーブル ストレージのエラーに対処する方法 [エンコードを utf8mb4 に変更]
  • MySQL が絵文字表現を保存できない問題の解決策の分析
  • MySQL に絵文字表現を挿入できない問題の解決方法
  • Java バックエンド MySQL データベースを有効にして絵文字表現をサポートする方法
  • 絵文字を保存するための MySQL の設定方法に関するチュートリアル

<<:  Vue フロントエンド開発における階層的にネストされたコンポーネント間の通信の詳細な説明

>>:  HTML ページの部分更新の実装コード

推薦する

Vue グローバル フィルターの概念、注意事項、基本的な使用方法

目次1. フィルターの概念1. グローバルフィルターのフォーマットをカスタマイズする2. フィルター...

シンプルで簡単なJavaScript開発のためのSvelte実装原理の詳細な説明

目次デモ1フラグメントの作成スヴェルトコンポーネント状態を変更できるデモSvelte は長い間存在し...

MySQLのスロークエリの詳細な説明

MySQL操作情報のクエリ show status -- すべての MySQL 操作情報を表示します...

jsの継承の6つの方法を詳しく解説

プロトタイプチェーン継承プロトタイプ継承は、ECMAScript における主な継承方法です。基本的な...

JS+Canvas でダイナミックな時計効果を実現

参考までに、Canvas をベースにしたダイナミッククロックのデモを用意しました。具体的な内容は次の...

ウェブサイトがhttpsを有効にした後のSSLのセキュリティ構成と検出

最近のウェブサイトでは SSL を有効にするのが標準となっています。ただし、SSL を設定した後も、...

HTML でカスタム画像を使用してチェックボックスを表示する方法

チェックボックスの使用を実装するために画像を使用する必要がある場合は、それを使用して実装できます。実...

SpringBoot プロジェクトの Docker クイック デプロイメントの紹介

1. Dockerをインストールするまず Linux 環境を開き、次のコマンドを入力してインストール...

JavaScript でネットワーク速度をテストする方法

目次序文ネットワーク速度のフロントエンド判定原理のまとめ1. img を読み込むか Ajax リクエ...

CocosCreatorでWeChatゲームを作成する方法

目次1. WeChatパブリックプラットフォームからWeChat開発者ツールをダウンロードする2. ...

JSタイマーを使用して要素を移動する

JS タイマーを使用して、要素に移動する効果のあるメソッドを作成します。実装のアイデアは、まず要素の...

最新の超詳細な VMware 仮想マシンのダウンロードとインストールのグラフィック チュートリアル

目次1. 仮想マシンをダウンロードする2. 仮想マシンのインストールVMware のダウンロードとイ...

ウェブページの右側に固定されたフローティングレイヤーの実装コード

コードをコピーコードは次のとおりです。 <!DOCTYPE html PUBLIC "...

ウェブページのグリッドデザインを考える

<br />元のアドレス: http://andymao.com/andy/post/8...

冗長カーネルを削除するLinuxディープインの実装方法

前の記事では、deepin linux に新しいカーネルを手動でインストールする方法について説明しま...