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 ページの部分更新の実装コード

推薦する

nginx で第 3 レベルドメイン名を設定する方法の例

問題の説明nginx を設定することで、異なるポートを介して異なる Web アプリケーションにアクセ...

Vue におけるキープアライブ マルチレベル ルーティング キャッシュの問題

目次1. 問題の説明2. 原因分析3. 解決策4. 処理1. 問題の説明調整センターでは、最後の 2...

Linux でのインストール中にソフトウェア パッケージの依存関係レポートに関連する問題の解決策

目次背景1) yumのkeepchche機能を有効にする: 方法1 2) yum-utils ソフト...

Linux での MySQL 5.7 の導入とリモート アクセス構成

前書き: 最近、私はパートナーとチームを組んで .NET Core プロジェクトに取り組む予定です。...

IframeとFRAMEの違いの分析

1. Iframe タグの使用<br />Iframe については、「忘れられた隅」に放...

MySQL 5.7.25 のインストールと設定方法のグラフィックチュートリアル

MySQL インストール ファイルには、msi 形式と zip 形式の 2 種類があります。クリック...

CSS でのナビゲーション バーとドロップダウン メニューの実装

1. CSSナビゲーションバー(1)ナビゲーションバーの機能ナビゲーション バーを使いこなすことは、...

Vueルータールーティングの詳細な説明

目次1. 基本的な使い方2. 注意すべき点3. マルチレベルルーティング(マルチレベルルーティング)...

Ubuntu 18.04 (物理マシン) で OpenWRT 開発環境を構成する方法

1. 仮想マシン(物理マシン)をインストールする仮想マシンまたは物理マシンにインストールできます。 ...

シンプルなスネークゲームを実現するネイティブjs

この記事では、スネークゲームを実装するためのjsの具体的なコードを参考までに共有します。具体的な内容...

Centos7 Zabbix3.4 メールアラーム設定(メール内容がxx.bin添付ファイルになる問題の解決)

目次1. 監視Linuxホストを追加する2. メールボックスを設定する1. 監視Linuxホストを追...

HTML+CSS+JSはナビゲーションバーのスクロールグラデーション効果を実現します

目次まず効果を見てみましょう:成し遂げる:要約:まず効果を見てみましょう: 成し遂げる: 1. ナビ...

Excelアップロード機能を実現するVue + iViewの完全コード

1. HTML部分 <Col span="2">ファイルをアップロー...

背景画像の配置におけるbackground-position属性の自己理解

最近、プロジェクトではラベルやボタンなどの断片的な画像をたくさん使用する必要があります。また、CSS...

iframe の多層ネスト、無制限のネスト、高度に適応したソリューション

ページ A、B、C の 3 つがあります。ページ A にはページ B が含まれ、ページ B にはペー...