現在、アプリケーションでは文字セットを UTF-8 に設定するためにPHPで次のコマンドを使用しています。
これは少しオーバーヘッドがあるので、これをMySQLのデフォルト設定として設定します。 /etc/my.cnfまたは他の場所でこれを実行できますか?
SET NAMES 'utf8'
SET CHARACTER SET utf8
/etc/my.cnfでデフォルトの文字セットを探しましたが、文字セットについては何もありません。
この時点で、私はMySQLの文字セットと照合変数をUTF-8に設定するために次のことを行いました。
skip-character-set-client-handshake
character_set_client=utf8
character_set_server=utf8
これは正しい対処方法ですか?
デフォルトをUTF-8に設定するには、my.cnfに以下を追加します。
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
[mysqld]
collation-server = utf8_unicode_ci
init-connect='SET NAMES utf8'
character-set-server = utf8
既存のDBの文字セットを変更したい場合は、私に知らせてください...あなたの質問で直接指定されていないので、それがあなたがやりたいのかどうかわかりません。
MySQLの最近のバージョンでは、
default-character-set = utf8
問題を引き起こします。それは私が思うに廃止予定です。
Justin Ball に「 MySQL 5.5.12にアップグレードしてもMySQLが起動しない にある - /、
そのディレクティブを削除してください、そうすればあなたは良いはずです。
それからあなたの設定ファイル(例えば '/etc/my.cnf')はそのようになるはずです:
[mysqld]
collation-server = utf8_unicode_ci
init-connect='SET NAMES utf8'
character-set-server = utf8
MySQLを再起動します。
念のため、あなたのMySQLはUTF-8であるので、あなたのMySQLプロンプトで以下のクエリを実行してください。
最初のクエリ:
mysql> show variables like 'char%';
出力は次のようになります。
+--------------------------+---------------------------------+
| Variable_name | Value |
+--------------------------+---------------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /usr/local/mysql/share/charsets/|
+--------------------------+---------------------------------+
2番目のクエリ:
mysql> show variables like 'collation%';
クエリの出力は次のとおりです。
+----------------------+-----------------+
| Variable_name | Value |
+----------------------+-----------------+
| collation_connection | utf8_general_ci |
| collation_database | utf8_unicode_ci |
| collation_server | utf8_unicode_ci |
+----------------------+-----------------+
MySQL 5.5ではmy.cnfを使用しています
[mysqld]
init_connect='SET collation_connection = utf8_unicode_ci'
init_connect='SET NAMES utf8'
character-set-server=utf8
collation-server=utf8_unicode_ci
skip-character-set-client-handshake
結果は
mysql> show variables like "%character%";show variables like "%collation%";
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)
+----------------------+-----------------+
| Variable_name | Value |
+----------------------+-----------------+
| collation_connection | utf8_unicode_ci |
| collation_database | utf8_unicode_ci |
| collation_server | utf8_unicode_ci |
+----------------------+-----------------+
3 rows in set (0.00 sec)
この質問にはすでに多くの答えがありますが、Mathias Bynensは、UTF-8サポートを向上させるには、 'utf8'の代わりに 'utf8mb4'を使用する必要があると述べました( 'utf8'は4バイト文字をサポートしない、フィールドは 挿入時に切り捨てられます )。これは重要な違いだと思います。そのため、デフォルトの文字セットと照合順序の設定方法に関するもう1つの回答があります。あなたがうんちの山を挿入することを可能にするもの(????)。
これはMySQL 5.5.35で動作します。
設定のいくつかはオプションであるかもしれないことに注意してください。私は何も忘れていないという確信が全くないので、この答えをコミュニティウィキにします。
mysql> SHOW VARIABLES LIKE 'char%'; SHOW VARIABLES LIKE 'collation%';
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)
+----------------------+-------------------+
| Variable_name | Value |
+----------------------+-------------------+
| collation_connection | utf8_general_ci |
| collation_database | latin1_swedish_ci |
| collation_server | latin1_swedish_ci |
+----------------------+-------------------+
3 rows in set (0.00 sec)
# ???? ????
# UTF-8 should be used instead of Latin1. Obviously.
# NOTE "utf8" in MySQL is NOT full UTF-8: http://mathiasbynens.be/notes/mysql-utf8mb4
[client]
default-character-set = utf8mb4
[mysqld]
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
[mysql]
default-character-set = utf8mb4
mysql> SHOW VARIABLES LIKE 'char%'; SHOW VARIABLES 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 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)
+----------------------+--------------------+
| Variable_name | Value |
+----------------------+--------------------+
| collation_connection | utf8mb4_general_ci |
| collation_database | utf8mb4_unicode_ci |
| collation_server | utf8mb4_unicode_ci |
+----------------------+--------------------+
3 rows in set (0.00 sec)
character_set_system 常にutf8 です。
これは既存のテーブルには影響しません。デフォルトの設定(新しいテーブルに使用される)にすぎません。次の ALTER code を使用して、既存のテーブルを変換することができます(回避策のダンプなし)。
ALTER DATABASE databasename CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE tablename CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
編集する
MySQL 5.0サーバーでは、character_set_client、character_set_connection、character_set_results、collation_connectionはlatin1のままです。 SET NAMES utf8
(utf8mb4はそのバージョンでは利用できません)を発行すると、それらもutf8に設定されます。
警告 :VARCHAR(255)型のインデックス列を持つutf8テーブルがある場合、最大キー長を超えているため(Specified key was too long; max key length is 767 bytes.
)、変換できないことがあります。可能であれば、列サイズを255から 191 に減らします(191 * 4 = 764 <767 <192 * 4 = 768のため)。その後、テーブルを変換することができます。
注: my.cnfファイルは/etc/mysql/
にあります。
これらの行を追加した後:
[mysqld]
collation-server = utf8_unicode_ci
init-connect='SET NAMES utf8'
character-set-server = utf8
skip-character-set-client-handshake
[client]
default-character-set = utf8
[mysql]
default-character-set = utf8
サーバーを再起動することを忘れないでください。
Sudo service mysql restart
また、default-character-set = utf8
を[mysqld]
に設定した後、MySQL 5.5.xが Ubuntu 12.04 (Precise Pangolin)で起動しないこともわかりました。
NijaCatは近かったが、やり過ぎを指定した:
デフォルトをUTF-8に設定するには、my.cnfに以下を追加します。
[client]
default-character-set=utf8
[mysqld]
default-character-set = utf8
次に、確認します。
mysql> show variables like "%character%";show variables like "%collation%";
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)
+----------------------+-----------------+
| Variable_name | Value |
+----------------------+-----------------+
| collation_connection | utf8_general_ci |
| collation_database | utf8_general_ci |
| collation_server | utf8_general_ci |
+----------------------+-----------------+
3 rows in set (0.00 sec)
Xubuntu 12.04の下で私は単に追加しました
[mysqld]
character_set_server = utf8
/etc/mysql/my.cnfへ
そしてその結果は
mysql> show variables like "%character%";show variables like "%collation%";
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)
+----------------------+-----------------+
| Variable_name | Value |
+----------------------+-----------------+
| collation_connection | utf8_general_ci |
| collation_database | utf8_general_ci |
| collation_server | utf8_general_ci |
+----------------------+-----------------+
3 rows in set (0.00 sec)
また、 http://dev.mysql.com/doc/refman/5.6/en/charset-server.htmlを見てください
ここにリストされているすべての設定は正しいです、しかしここにこれは最も最適で十分な解決策です:
[mysqld]
init_connect='SET collation_connection = utf8_unicode_ci'
character-set-server = utf8
collation-server = utf8_unicode_ci
[client]
default-character-set = utf8
これらを/etc/mysql/my.cnf
に追加してください。
パフォーマンスの問題から、 utf8_unicode_ci 照合タイプを選択してください。
年です。結果:
mysql> SHOW VARIABLES LIKE 'character%';
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
mysql> SHOW VARIABLES LIKE 'collation%';
+----------------------+-----------------+
| Variable_name | Value |
+----------------------+-----------------+
| collation_connection | utf8_unicode_ci |
| collation_database | utf8_unicode_ci |
| collation_server | utf8_unicode_ci |
+----------------------+-----------------+
そして、これはあなたが 非SUPERユーザー として接続した時です。
例えば、SUPERユーザーとしての接続とSUPER以外のユーザーとしての接続の違い(もちろん utf8_unicode_ci 照合の場合):
_ super _ privを持つユーザー:
mysql> SHOW VARIABLES LIKE 'collation%';
+----------------------+-----------------+
| Variable_name | Value |
+----------------------+-----------------+
| collation_connection | utf8_general_ci | <---
| collation_database | utf8_unicode_ci |
| collation_server | utf8_unicode_ci |
+----------------------+-----------------+
非SUPER privを持つユーザー:
mysql> SHOW VARIABLES LIKE 'collation%';
+----------------------+-----------------+
| Variable_name | Value |
+----------------------+-----------------+
| collation_connection | utf8_unicode_ci |
| collation_database | utf8_unicode_ci |
| collation_server | utf8_unicode_ci |
+----------------------+-----------------+
私は 包括的な記事 (rus)を書き、なぜあなたがどちらかのオプションを使うべきかを詳しく説明しました。 文字セット および 照合順序 のすべてのタイプが考慮されます。サーバー用、データベース用、接続用、表用、さらには列用です。
これとこの記事が、はっきりしない瞬間を明確にするのに役立つことを願っています。
ディレクティブがcharacter-set-system=utf8
に変更されました
http://dev.mysql.com/doc/refman/5.6/en/charset-configuration.html
On Fedora 21
$ vi /etc/my.cnf
フォローを追加:
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
[mysqld]
init_connect='SET collation_connection = utf8_unicode_ci'
init_connect='SET NAMES utf8'
character-set-server=utf8
collation-server=utf8_unicode_ci
skip-character-set-client-handshake
保存して終了。
最後にservice mysqld restart
を使ってサービスmysqldを再起動します。
MySQLのバージョンとLinuxディストリビューションは設定をするときに重要になるかもしれません。
ただし、[mysqld]
セクションの下の変更は推奨されています。
私はtomazzlenderの答えについて簡単に説明したいと思います。
[mysqld]
init_connect='SET collation_connection = utf8_unicode_ci'
init_connect='SET NAMES utf8'
character-set-server=utf8
collation-server=utf8_unicode_ci
skip-character-set-client-handshake
[mysqld]
これはcollation_connectionをutf8_unicode_ciに変更します
init_connect='SET collation_connection = utf8_unicode_ci'
SET NAMES
を使う:
init_connect='SET NAMES utf8'
SET NAMESは3文字に影響します。
character_set_client
character_set_results
character_set_connection
これはcharacter_set_database & character_set_server
を設定します
character-set-server=utf8
これはcollation_databaseとcollation_serverにのみ影響します
collation-server=utf8_unicode_ci
すみません、これが何のためにあるのかよくわかりません。私はそれを使用しません:
skip-character-set-client-handshake
MySQL Workbenchを使用してクライアントの文字セットサポートを確認できない場合は、次の点に注意してください。
重要 MySQL Workbenchによって開かれたすべての接続は、クライアントの文字セットを自動的にutf8に設定します。 SET NAMES ...などを使用してクライアントの文字セットを手動で変更すると、MySQL Workbenchで文字が正しく表示されない場合があります。クライアントの文字セットの詳細については、接続文字セットと照合順序を参照してください。
そのため、MySQL Workbenchの文字セットをmy.cnfの変更で上書きすることはできませんでした。例えば'セット名utf8mb4'
MySQL 5.5、あなたが必要とするのは以下のとおりです。
[mysqld]
character_set_client=utf8
character_set_server=utf8
collation_server=utf8_unicode_ci
collation_server
はオプションです。
mysql> show variables like 'char%';
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)
クライアントの設定に混乱していて、mysqlサービスを再起動した後にconnがリセットされた場合。これらのステップを試してください(これは私にとってはうまくいきました)。
vi /etc/my.cnf
:wq [client] character-sets-dir=/usr/local/mysql/share/mysql/charsets
の内容を追加してくださいstatus;
を入力すると、 'client'と 'conn'の文字セットが 'utf8'に設定されます。詳細については reference を確認してください。
あなたはそれがそうする方法でそれをすることができます、そしてそれがうまくいかないなら、あなたはmysqlを再起動する必要があります。