だけの@ decezeの答えに追加するには、私はよく構成されたお勧めしますMySQLサーバ(私にとっては、/etc/mysql/mysql.conf.d/mysqld.cnf
)。ここにはutfmb4
を使用していることを確認するための設定オプションがありますが、私はすべてのMySQL設定オプションを実行することをお勧めしますが、それは難しいので、非常に最適ではないデフォルトがたくさんあります。
[client]
default-character-set = utf8mb4
[mysql]
default_character_set = utf8mb4
[mysqld]
init-connect = "SET NAMES utf8mb4"
character-set-client-handshake = FALSE
character-set-server = "utf8mb4"
collation-server = "utf8mb4_unicode_ci"
autocommit = 1
block_encryption_mode = "aes-256-cbc"
最後の1つはデフォルトにする必要があります。また、init-connect
は毎回実行する必要はありません。コードをきれいに保ちます。今すぐ実行します。
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 |
+--------------------------+--------------------+
そして、あなたはすでにこれをやっているが、明示的にテーブルの作成に定義するために悪くはないように見えます:
CREATE TABLE `mysql_table` (
`mysql_column` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`mysql_column`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
これは誰かを助けることを願っています。
データベース接続のエンコーディングを設定していますか?もしそうなら、どのように、そして何に?文字は実際にどこかに変換されているのか、それとも単なる表示の問題ですか?その文字列の 'bin2hex()'はPHPであなたに何を与えるのでしょうか? – deceze