昨日聞いた質問 に対する回答の1つは、データベースがUTF-8文字を正しく処理できることを確認する必要があることを示唆しています。 MySQLでこれを行うにはどうすればよいですか?
更新:
短い答え-ほとんど常にutf8mb4
文字セットとutf8mb4_unicode_ci
照合を使用する必要があります。
データベースを変更するには:
ALTER DATABASE dbname CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
見る:
この回答に対するアーロンのコメント MySQLでUTF-8を適切に処理する方法
変換ガイド: https://dev.mysql.com/doc/refman/5.5/en/charset-unicode-conversion.html
元の答え:
MySQL 4.1以降には、デフォルトの文字セットUTF-8があります。これはmy.cnf
ファイルで確認できます。忘れずにbothクライアントとサーバー(default-character-set
およびcharacter-set-server
を設定してください)。
UTF-8に変換する既存のデータがある場合は、データベースをダンプして、UTF-8としてインポートし直してください。
SET NAMES utf8
を使用しますDEFAULT CHARSET=utf8
を使用しますmy.cnf
を参照)。使用する言語(PHPなど)もUTF-8でなければならないことに注意してください。 PHPの一部のバージョンは、独自のMySQLクライアントライブラリを使用しますが、これはUTF-8に対応していない場合があります。既存のデータを移行する場合は、最初にバックアップすることを忘れないでください!物事が計画通りに進まない場合、データの奇妙なチョッピングがたくさん起こる可能性があります!
いくつかのリソース:
これを「永久」にするには、my.cnf
で:
[client]
default-character-set=utf8
[mysqld]
character-set-server = utf8
確認するには、クライアントに移動していくつかの変数を表示します。
SHOW VARIABLES LIKE 'character_set%';
それらがすべてutf8
であることを確認します。ただし、..._filesystem
はbinary
および..._dir
でなければならず、MySQLインストールのどこかを指します。
MySQL 4.1以降には、utf8
を呼び出すデフォルトの文字セットがありますが、実際にはUTF-8のサブセットのみです(3バイト以下の文字のみが許可されます)。
「フル」UTF-8が必要な場合は、utf8mb4
を文字セットとして使用します。
短い答え:utf8mb4
を4つの場所で使用します:
SET NAMES utf8mb4
またはMySQLへのクライアントの接続を確立するときに同等のものCHARACTER SET utf8mb4
すべてのテーブル/列-厳密にascii/hex/country_code/Zip_code/etcである列を除く。<meta charset charset=UTF-8>
は、HTMLに出力する場合。 (はい、スペルはここで異なります。)上記のリンクは、「すべての懸念に対処するために詳細な正解が必要です」を提供しています。 -このフォーラムにはスペースの制限があります。
編集
CHARACTER SET utf8mb4
は、「すべて」の世界の文字を含むことに加えて、COLLATION utf8mb4_unicode_520_ci
は、使用するのに最適な「万能」照合であることは間違いありません。 (トルコ語、スペイン語など、これらの言語のニュアンスが必要な人のための照合もあります。)
文字セットは、データベース(デフォルト)とテーブルのプロパティです。見ることができます(MySQLコマンド):
show create database foo;
> CREATE DATABASE `foo`.`foo` /*!40100 DEFAULT CHARACTER SET latin1 */
show create table foo.bar;
> lots of stuff ending with
> ) ENGINE=InnoDB AUTO_INCREMENT=252 DEFAULT CHARSET=latin1
言い換えると;データベースの文字セットを確認したり変更したりするのは非常に簡単です。
ALTER TABLE `foo`.`bar` CHARACTER SET utf8;
データベース自体の文字セットエンコーディングをUTF-8に変更するには、mysql>プロンプトで次のコマンドを入力します。 USE ALTER DATABASE
.. DBNAMEをデータベース名に置き換えます。
ALTER DATABASE DBNAME CHARACTER SET utf8 COLLATE utf8_general_ci;
これはこの質問の複製です MySQLデータベースの文字セットと照合全体をUTF-8に変換する方法?
Javierのソリューションに従いましたが、my.cnfにいくつかの異なる行を追加しました。
[myslqd]
skip-character-set-client-handshake
collation_server=utf8_unicode_ci
character_set_server=utf8
私はここでこのアイデアを見つけました: http://dev.mysql.com/doc/refman/5.0/en/charset-server.html ページの下。彼は、skip-character-set-client-handshakeにはある程度の重要性があると述べています。
database collation
をUTF-8
に設定し、table collation
をデータベースのデフォルトに適用します。
これらの MySQLとUTF-8のヒント は役に立つかもしれません。残念ながら、それらは完全な解決策ではなく、よくある落とし穴です。