それについて考えてください:
- 次のようにデータベースにデータを保存しています
latin1
- データはmysqldによって内部的に処理されます
latin1
OSまたは接続からのデータが utf8
、mysqldどのように処理しますか?
最良のものを推測または期待するのではなく、着信文字セットの動作を変更できます。とを除いinformation_schema
てmysql
、すべてのデータベースを取得し、デフォルトの文字セットをutf8
次のように設定します。
ALTER DATABASE dbname CHARACTER SET utf8;
特定の照合を使用する場合は、次を実行します。
ALTER DATABASE dbname COLLATE 'utf8_general_ci';
選択できる照合順序は次のとおりです。
mysql> select * from information_schema.collations where CHARACTER_SET_NAME = 'utf8';
+--------------------+--------------------+-----+------------+-------------+---------+
| COLLATION_NAME | CHARACTER_SET_NAME | ID | IS_DEFAULT | IS_COMPILED | SORTLEN |
+--------------------+--------------------+-----+------------+-------------+---------+
| utf8_general_ci | utf8 | 33 | Yes | Yes | 1 |
| utf8_bin | utf8 | 83 | | Yes | 1 |
| utf8_unicode_ci | utf8 | 192 | | Yes | 8 |
| utf8_icelandic_ci | utf8 | 193 | | Yes | 8 |
| utf8_latvian_ci | utf8 | 194 | | Yes | 8 |
| utf8_romanian_ci | utf8 | 195 | | Yes | 8 |
| utf8_slovenian_ci | utf8 | 196 | | Yes | 8 |
| utf8_polish_ci | utf8 | 197 | | Yes | 8 |
| utf8_estonian_ci | utf8 | 198 | | Yes | 8 |
| utf8_spanish_ci | utf8 | 199 | | Yes | 8 |
| utf8_swedish_ci | utf8 | 200 | | Yes | 8 |
| utf8_turkish_ci | utf8 | 201 | | Yes | 8 |
| utf8_czech_ci | utf8 | 202 | | Yes | 8 |
| utf8_danish_ci | utf8 | 203 | | Yes | 8 |
| utf8_lithuanian_ci | utf8 | 204 | | Yes | 8 |
| utf8_slovak_ci | utf8 | 205 | | Yes | 8 |
| utf8_spanish2_ci | utf8 | 206 | | Yes | 8 |
| utf8_roman_ci | utf8 | 207 | | Yes | 8 |
| utf8_persian_ci | utf8 | 208 | | Yes | 8 |
| utf8_esperanto_ci | utf8 | 209 | | Yes | 8 |
| utf8_hungarian_ci | utf8 | 210 | | Yes | 8 |
| utf8_sinhala_ci | utf8 | 211 | | Yes | 8 |
+--------------------+--------------------+-----+------------+-------------+---------+
22 rows in set (0.03 sec)
また、実行することができます
mysql> show collation where charset='utf8';
+--------------------+---------+-----+---------+----------+---------+
| Collation | Charset | Id | Default | Compiled | Sortlen |
+--------------------+---------+-----+---------+----------+---------+
| utf8_general_ci | utf8 | 33 | Yes | Yes | 1 |
| utf8_bin | utf8 | 83 | | Yes | 1 |
| utf8_unicode_ci | utf8 | 192 | | Yes | 8 |
| utf8_icelandic_ci | utf8 | 193 | | Yes | 8 |
| utf8_latvian_ci | utf8 | 194 | | Yes | 8 |
| utf8_romanian_ci | utf8 | 195 | | Yes | 8 |
| utf8_slovenian_ci | utf8 | 196 | | Yes | 8 |
| utf8_polish_ci | utf8 | 197 | | Yes | 8 |
| utf8_estonian_ci | utf8 | 198 | | Yes | 8 |
| utf8_spanish_ci | utf8 | 199 | | Yes | 8 |
| utf8_swedish_ci | utf8 | 200 | | Yes | 8 |
| utf8_turkish_ci | utf8 | 201 | | Yes | 8 |
| utf8_czech_ci | utf8 | 202 | | Yes | 8 |
| utf8_danish_ci | utf8 | 203 | | Yes | 8 |
| utf8_lithuanian_ci | utf8 | 204 | | Yes | 8 |
| utf8_slovak_ci | utf8 | 205 | | Yes | 8 |
| utf8_spanish2_ci | utf8 | 206 | | Yes | 8 |
| utf8_roman_ci | utf8 | 207 | | Yes | 8 |
| utf8_persian_ci | utf8 | 208 | | Yes | 8 |
| utf8_esperanto_ci | utf8 | 209 | | Yes | 8 |
| utf8_hungarian_ci | utf8 | 210 | | Yes | 8 |
| utf8_sinhala_ci | utf8 | 211 | | Yes | 8 |
+--------------------+---------+-----+---------+----------+---------+
22 rows in set (0.00 sec)
mysql>
データベースの個々の文字セットを表示するには、次を実行します。
mysql> show create database sample;
+----------+-------------------------------------------------------------------+
| Database | Create Database |
+----------+-------------------------------------------------------------------+
| sample | CREATE DATABASE `sample` /*!40100 DEFAULT CHARACTER SET latin1 */ |
+----------+-------------------------------------------------------------------+
1 row in set (0.00 sec)
mysql>
設定に関しては、これを試すことができます:
行を追加します my.cnf
[mysqld]
character_set_database=utf8
character_set_server=utf8
その後、mysqlを再起動します
これについては、2011年8月1日に議論しました。テーブル内の文字セットエンコーディング
CAVEAT(WindowsのMySQL DBサーバーの場合)
これらのコマンド
ALTER DATABASE dbname CHARACTER SET utf8;
ALTER DATABASE dbname COLLATE 'utf8_general_ci';
Windowsがファイルをロックする方法のため、MySQLのWindowsバージョンでは動作しません。必要なファイルが呼び出されます。このファイルはdb.opt
、のデータベースサブフォルダーにありdatadir
ます。
次のことを行う必要があります。
- そのデータベースのmysqldump(データベース作成情報なし、テーブル作成とINSERTのみ)
- そのデータベースを削除する
- 特定の文字セットと照合順序でデータベースを作成します
- ダンプをリロードします
エピローグ
何をするにしても、開発/ステージングサーバーで変更を行って、目的の効果が得られるかどうかを確認してください
更新2012-12-05 11:00 EDT
あなたの質問
本当に変更する必要がありますか?
データの適切な処理を保証するために、あなたはリンゴ同士を持っていることを確認したいかもしれません。データが1つの文字セットとして準備され、データベースと一緒にテーブルにロードされると、別の文字セットがmysqldが取得してDB接続に返送したときに表示されるデータを表示しないようにデータを調整する可能性があります。開発/ステージングサーバーにデータベースをロードして、デフォルトの文字セットを設定してみてください。
一部のデフォルトが使用するのにutf8
、一部のデフォルトが使用するのはなぜlatin1
ですか?
これは、MySQLバイナリのOSバージョンに依存します。latin1
Linuxバージョンではを使用できますが、Windows バージョンでは使用できますutf8
。