20

utf8mb4MySQL (5.6.11) で4 バイトを使用するために、my.iniファイル (my.cnfが見つかりません) に次の変数を設定しました。このファイルは、Windows XP ではApplication Data( )という名前の隠しフォルダーにあります。C:\Documents and Settings\All Users\Application Data\MySQL\MySQL Server 5.6インストールディレクトリの下にはありません。

[client]
port=3306
default-character-set=utf8mb4

[mysql]
default-character-set=utf8mb4

[mysqld]
init-connect='SET NAMES utf8mb4'
collation_server=utf8mb4_unicode_ci
character_set_server=utf8mb4

そして、次のコマンドを発行します。

SHOW VARIABLES
WHERE Variable_name
LIKE 'character\_set\_%'
OR Variable_name LIKE 'collation%';

まだ次のリストが表示されます。

ここに画像の説明を入力

写真自体から、いくつかの変数がまだ 3-byte を使用していることは明らかですutf8


これを行う前に、データベース自体に対応する変更を加えるために、次のコマンドが既に発行されていました。

ALTER DATABASE database_name
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;

また、上記のデータベース内のすべてのテーブルに対して、次のコマンドも発行されていました。

ALTER TABLE table_name
CONVERT TO CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;

それにもかかわらず、一部の変数がまだ上記の文字セットと照合に設定されていない理由は何ですか? 何が欠けている?

上記で指定されたすべてのタスクが実行された後、システム (オペレーティング システム) 自体が再起動されました。

4

4 に答える 4

14

クライアントは通常、接続時にこれらの値を設定します。my.ini の設定は、クライアントが接続エンコーディングを明示的に指定しない場合に適用される単なるデフォルトです。それらは信頼できないため、すべてのクライアントは接続エンコーディングを指定する必要があります。派手なスクリーンショットがいくつかあるので、接続エンコーディングを明示的に設定するGUIユーティリティに接続していると思います。

接続文字セットを設定する PHP の例:

new PDO('mysql:host=localhost;charset=utf8mb4')
于 2015-02-16T12:10:30.347 に答える
1

ルートとして接続していると思われるため、init-connect='SET NAMES utf8mb4'実行されません。

アプリケーション コードに root (または SUPER) を使用するのは賢明ではありません。管理アクションのためだけに。

于 2015-02-23T23:09:27.620 に答える