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

推薦する

MySql のクラッシュとサービスの起動失敗の解決策

私は長い間PHPに触れてきましたが、インストール環境は非常に不慣れです。多くの問題に遭遇しました。B...

UDP シンプル サーバー クライアント コード例

UDP の理論については詳しく説明しません。UDP に関する HelloWorld プログラムを紹介...

vitrualBox+ubuntu16.04 python3.6 最新チュートリアルと詳細な手順のインストール

最近ディープラーニングを学ぶためにUbuntu+Python 3.6バージョンを使う必要があるため、...

怖いハロウィーン Linux コマンド

ハロウィーンではありませんが、Linux の不気味な側面に注目する価値はあります。幽霊、魔女、ゾンビ...

LinkedIn がウェブサイト閲覧を簡素化するためにリニューアル

ビジネス ソーシャル ネットワーキング サイト LinkedIn は最近、ナビゲーション バーとユー...

ネイティブ JS オブジェクト指向タイピング ゲーム

この記事では、JSオブジェクト指向タイピングゲームの具体的なコードを参考までに紹介します。具体的な内...

将来人気が出るであろういくつかのナビゲーション方向

<br />今は情報爆発の時代であるだけでなく、サービス爆発の時代でもあります。それはす...

vue+iviewのメニューとタブの連携方法

Vue+iview メニューとタブのリンク現在、vue+iview を使用してバックエンド管理システ...

MySQL 権限昇格のさまざまな形態の概要

目次1. Webshel​​lを書く出力ファイルにシェルを書き込むログファイル書き込みシェル2. U...

Vueデータ双方向バインディング実装方法

目次1. はじめに2. コードの実装2.1 目的分析2.2 実装プロセス2.2.1 エントリーコード...

Windows で MySQL のルート パスワードをリセットする方法

今日、WordPress がデータベースに接続できないことがわかりました。ウィンドウ サーバーにログ...

MySQL データベースの手動およびスケジュールされたバックアップ手順

目次手動バックアップタイマーバックアップ手動バックアップ1) cmd コンソール: mysqldum...

CSS 完全な視差スクロール効果

1. 何ですか視差スクロールとは、複数の背景レイヤーを異なる速度で動かすことで、3次元のモーション...

Element UI で自動サイズ調整テキストエリアの高さを設定する方法

Element UIのtextarea input自動サイズに設定すると、テキストボックスのデフォル...

ページにデータを表示するReactメソッド

目次親コンポーネントリストボックスリストコンポーネントボタンコンポーネント PageButton昨年...