[解決済み] MySQL utf8mb4, 絵文字の保存時のエラー
質問
MySQLデータベースに、あるサービスからのユーザーの名前を保存しようとしています。これらの名前には、「?」のような絵文字が含まれることがあります。(単なる例です)
少し検索した後、私はこれを見つけました スタックオーバーフロー にリンクしている チュートリアル . 手順に従い、すべてが適切に設定されているように見えます。
データベース (charset と collation は utf8mb4 (_unicode_ci) に設定)、TestTable というテーブル、および "Text" 列があり、このように設定されています (VARCHAR(191) utf8mb4_unicode_ci).
絵文字を保存しようとすると、エラーが発生します。
Example of error for shortcake (????):
Warning: #1300 Invalid utf8 character string: 'F09F8D'
Warning: #1366 Incorrect string value: '\xF0\x9F\x8D\xB0' for column 'Text' at row 1
ちゃんと保存できた絵文字は、太陽☀️だけでした。
正直、全部は試していませんが。
何か設定に抜けがあるのでしょうか?
ご注意ください。 保存のすべてのテストは、クライアント側を関与させませんでした。私は phpmyadmin を使用して手動で値を変更し、データを保存しています。ですから、クライアント側の適切な構成は、私が世話をするものです。 後 の後、サーバーが適切に絵文字を保存するようにします。
もう一つの補足
: 現在、絵文字を保存する際に、上記のようなエラーが発生するか、エラーが発生せずに
Username ????
として保存されます。
Username ????
. エラーになるかならないかは、保存方法によって異なります。SQLステートメントで作成/保存するときはクエスチョンマーク付きで保存し、インラインで編集するときはクエスチョンマーク付きで保存し、編集ボタンで編集するときはエラーが発生します。
ありがとうございます
EDIT 1: さて、私は問題を見つけたと思いますが、解決策ではありません。 それは、データベース固有の変数が適切に変更されていないように見えます。
サーバーにrootでログインして、変数(グローバル)を読み出すと。
使用したクエリ
SHOW VARIABLES WHERE Variable_name LIKE 'character\_set\_%' OR Variable_name LIKE 'collation%';
+--------------------------+--------------------+
| Variable_name | Value |
+--------------------------+--------------------+
| character_set_client | utf8mb4 |
| character_set_connection | utf8mb4 |
| character_set_database | utf8mb4 |
| character_set_filesystem | binary |
| character_set_results | utf8mb4 |
| character_set_server | utf8mb4 |
| character_set_system | utf8 |
| collation_connection | utf8mb4_unicode_ci |
| collation_database | utf8mb4_unicode_ci |
| collation_server | utf8mb4_unicode_ci |
+--------------------------+--------------------+
10 rows in set (0.00 sec)
私のDatabaseの場合(phpmyadminで、同じクエリ)、以下のようになります。
+--------------------------+--------------------+
| Variable_name | Value |
+--------------------------+--------------------+
| character_set_client | utf8 |
| character_set_connection | utf8mb4 |
| character_set_database | utf8mb4 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| collation_connection | utf8mb4_unicode_ci |
| collation_database | utf8mb4_unicode_ci |
| collation_server | utf8mb4_unicode_ci |
+--------------------------+--------------------+
特定のデータベースでこれらの設定を調整するにはどうしたらよいでしょうか。 また、最初に表示された設定をデフォルトとして持っているにもかかわらず、新しいデータベースを作成すると、設定として2番目のものが表示されます。
2を編集してください。
ここで、私の
my.cnf
ファイルです。
[client]
port=3306
socket=/var/run/mysqld/mysqld.sock
default-character-set = utf8mb4
[mysql]
default-character-set = utf8mb4
[mysqld_safe]
socket=/var/run/mysqld/mysqld.sock
[mysqld]
user=mysql
pid-file=/var/run/mysqld/mysqld.pid
socket=/var/run/mysqld/mysqld.sock
port=3306
basedir=/usr
datadir=/var/lib/mysql
tmpdir=/tmp
lc-messages-dir=/usr/share/mysql
log_error=/var/log/mysql/error.log
max_connections=200
max_user_connections=30
wait_timeout=30
interactive_timeout=50
long_query_time=5
innodb_file_per_table
character-set-client-handshake = FALSE
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
!includedir /etc/mysql/conf.d/
どのように解決するのですか?
character_set_client
,
_connection
そして
_results
はすべて
utf8mb4
でないと食べられない。
何かが、どこかで、これらのサブセットを個別に設定しているのです。 my.cnf と phpmyadmin の設定をかき回してみてください。
もし
SET NAMES utf8mb4
が実行されると、3つとも正しく設定されます。
たった3バイトなので、太陽が輝いた-。
E2 98 80
; utf8 は Unicode 文字の 3 バイトの utf8 エンコーディングで十分です。
関連
-
mysqlでインデックスに障害が発生する原因は何ですか?
-
MySQLのLike演算子に関する詳細
-
mysqlにおけるvarcharの日付比較とソートの実装
-
MySQLのNULLについて解説した記事
-
MySQLで正規表現を使う 詳細
-
[解決済み】MySQL エラー 1093 - FROM 句で更新のターゲット テーブルを指定できません。
-
mysql5.7のインストールと、無料・長期利用を目的としたNavicateの導入プロセスについて
-
SQL Server のトランザクションは、try キャッチに記述しなければ、中間ステートメントがエラーを報告してもコミットされます。
-
[解決済み] ブーリアン値を格納するために使用するMySQLデータ型
-
[解決済み] MySQLテーブルへの挿入または存在する場合の更新
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] datetimeの挿入時に文字列から日付や時刻を変換すると、変換に失敗する
-
[解決済み] ユニークなテーブル/エイリアスではない
-
Mysql がエラーを報告 オペランドには 1 つのカラムが含まれている必要があります。
-
Unknown character set.を解決する。MySQLデータベースインポート時の'utf8mb4'エラーの解消
-
[解決済み] ユーザー 'root'@'localhost' (パスワード: YES を使用) のアクセス拒否 - 特権がない?
-
[解決済み] MySQLのプロセスリストを見つけ、それらのプロセスを終了させる方法は?
-
[解決済み] なぜ SQLAlchemy の count() は生のクエリよりずっと遅いのでしょうか?
-
[解決済み] INNER JOIN、LEFT JOIN、RIGHT JOIN、FULL JOINの違いは何ですか?[重複しています]。
-
[解決済み] MySQLで複数のカラムに一意制約を指定するには?
-
[解決済み] UTF-8文字に関するトラブル:見たものと保存したものが違う