character_set_clientの値をutf8mb4に設定します


12

私のDBをこのガイドutf8mb4従うように変換しようとしています。私は設定しました:

[client]
default-character-set=utf8mb4

[mysql]
default-character-set=utf8mb4

[mysqld]
init-connect='SET NAMES utf8mb4'
collation_server=utf8mb4_unicode_ci
character_set_server=utf8mb4
skip-character-set-client-handshake

しかし、の値character_set_clientcharacter_set_results、まだはutf8mb4に変更されません。

mysql> SHOW VARIABLES WHERE Variable_name LIKE 'character\_set\_%' OR Variable_name LIKE 'collation%';
+--------------------------+--------------------+
| 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     | utf8mb4            |
| character_set_system     | utf8               |
| collation_connection     | utf8mb4_unicode_ci |
| collation_database       | utf8mb4_unicode_ci |
| collation_server         | utf8mb4_unicode_ci |
+--------------------------+--------------------+

私は何を間違えていますか?これらの値をutf8mb4に設定するにはどうすればよいですか?

回答:


14

開示:私は、MySQLデータベース完全なUnicodeをサポートする方法の著者です。

  1. 変更した設定をどこに保存しましたか?mysqld既定のオプションの読み込み元を確認します。通常は/etc/my.cnfガイドで説明されているように)ですが、システムによって異なる場合があります。次のコマンドを実行して確認します。

    $ mysqld --help --verbose 2> /dev/null | grep -A1 'Default options'
    Default options are read from the following files in the given order:
    /etc/my.cnf /etc/mysql/my.cnf /usr/local/etc/my.cnf ~/.my.cnf
  2. 変更後mysqld、実行して再起動しましたmysqld restartか?


1.で変更を保存しました\xampp\mysql\bin\my.ini。実行できませんでしmysqld --help --verbose 2> /dev/null | grep -A1 'Default options'た。次のエラーが発生する'grep' is not recognized as an internal or external command, operable program or batch file.ためです。これは初めてなので、何か間違っている可能性があります。
qwaz 2014

2. mysqldを再起動した後、次の警告が表示されます。2014-02-19 10:25:17 0 [警告] character-set-client-handshakeの代わりに一意のオプションプレフィックスcharacter_set_clientを使用することは非推奨であり、削除されます将来のリリースで。代わりにフルネームを使用してください。2014-02-19 10:25:17 0 [警告] mysqld:無効な値 'utf8mb4'があるため、オプション '--character-set-client-handshake'を無視します
qwaz

1
なぜskip-character-set-client-handshake設定ファイルにあるのですか?変数ではなく、コマンドラインオプションです。
Mathias Bynens、2014

1
ローカルサーバーを再インストールする必要がありました。あなたのガイドをもう一度歩き、すべてがうまくいきました。私はあなたの反応と助けに感謝します。私はあなたの答えに戻って、それを行うのに十分な担当者がいるとすぐにそれを賛成投票します。
qwaz 2014

3
私はこれを試してみましたが、それでもcharacter_set_clientcharacter_set_connectioncharacter_set_resultscollation_connectionとして示されていますutf8。これが機能しない理由はありますか?
サリタ

2

私もそのガイドに従いましたが、同じ問題が再び発生しました。実際の問題はDEFAULT CHARACTER、引数としてDBを作成するために使用されるコマンドにあり、実行中にそれが渡されない場合、デフォルトの文字セットは渡されますが、渡されませんutfmb4

以下は私がそれを修正するために従ったステップです:

  1. utf8mb4文字セットを使用してダミーデータベースを作成します。

    create database `your_db_name_dummy`
      DEFAULT CHARACTER SET utf8mb4
      DEFAULT COLLATE utf8mb4_unicode_ci;
  2. 実際のデータベースからこのダミーデータベースに実際の構造とデータをコピーする

    mysqldump -uroot -proot_password your_db_name | mysql -uroot -proot_password your_db_name_dummy

  3. 現在のデータベースを削除

    SET FOREIGN_KEY_CHECKS=0;
    DROP DATABASE your_db_name;
  4. 新しいデータベースを作成する

    create database `your_db_name`
      DEFAULT CHARACTER SET utf8mb4
      DEFAULT COLLATE utf8mb4_unicode_ci;
  5. 最後に、テーブル構造とデータを元のデータベースに戻します

    mysqldump -uroot -proot_password your_db_name_dummy | mysql -uroot -proot_password your_db_name

上記の手順を使用する場合は、以下の行も注意深く読んでください。

前提条件と私の現状:

  • すべての構造、データ、ストアドプロシージャ、関数、トリガーなどをバックアップします。
  • mysql --version mysql Ver 14.14 Distrib 5.7.22、EditLineラッパーを使用するLinux(x86_64)用

  • cat /etc/my.cnf

    [client]
    default-character-set = utf8mb4
    
    [mysql]
    default-character-set = utf8mb4
    
    [mysqld]
    character-set-client-handshake = FALSE
    character-set-server = utf8mb4
    init-connect = 'SET NAMES utf8mb4
    collation-server = utf8mb4_unicode_ci
  • 私はJavaクライアントを使用しています 'mysql:mysql-connector-java:5.1.30'

  • 私の接続文字列は jdbc:mysql://ip.of.database:3306/your_db_name?zeroDateTimeBehavior=convertToNull&noAccessToProcedureBodies=true&autoReconnect=true
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.