昨日私が行った質問への回答の 1 つは、データベースが UTF-8 文字を正しく処理できることを確認する必要があることを示唆していました。MySQLでこれを行うにはどうすればよいですか?
14 に答える
アップデート:
短い答え - ほとんどの場合、utf8mb4
文字セットとutf8mb4_unicode_ci
照合順序を使用する必要があります。
データベースを変更するには:
ALTER DATABASE dbname CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
見る:
この回答に対する Aaron のコメントMySQL が UTF-8 を適切に処理するようにする方法
変換ガイド: https://dev.mysql.com/doc/refman/5.5/en/charset-unicode-conversion.html
元の回答:
MySQL 4.1 以降のデフォルトの文字セットは UTF-8 です。ファイルでこれを確認できます。クライアントとサーバーの両方my.cnf
を設定することを忘れないでください (および)。default-character-set
character-set-server
UTF-8 に変換したい既存のデータがある場合は、データベースをダンプし、UTF-8 としてインポートして戻します。次のことを確認してください。
SET NAMES utf8
データベースにクエリ/挿入する前に使用するDEFAULT CHARSET=utf8
新しいテーブルを作成するときに使用します- この時点で、MySQL クライアントとサーバーは UTF-8 になっているはずです (「参考文献」を参照
my.cnf
)。使用する言語 (PHP など) もすべて UTF-8 でなければならないことに注意してください。PHP の一部のバージョンでは、独自の MySQL クライアント ライブラリが使用されますが、これは UTF-8 に対応していない可能性があります。
既存のデータを移行したい場合は、最初にバックアップすることを忘れないでください! 物事が計画どおりに進まない場合、多くの奇妙なデータのチョッピングが発生する可能性があります。
いくつかのリソース:
- 完全な UTF-8 移行(cdbab.com)
- PHP 関数の UTF-8 対応に関する記事(この情報の一部は古くなっていることに注意してください)
これを「永続的」にするために、my.cnf
:
[client]
default-character-set=utf8
[mysqld]
character-set-server = utf8
確認するには、クライアントに移動していくつかの変数を表示します。
SHOW VARIABLES LIKE 'character_set%';
それらがすべて、 MySQLインストールのどこかを指しているはずのとutf8
を除いてすべてであることを確認します。..._filesystem
binary
..._dir
MySQL 4.1 以降には、呼び出すデフォルトの文字セットがありますutf8
が、実際にはこれは UTF-8 のサブセットにすぎません (3 バイト以下の文字のみが許可されます)。
utf8mb4
「完全な」UTF-8 が必要な場合は、文字セットとして使用します。
簡単な答え: utf8mb4
4 つの場所で使用します。
- クライアントのバイトは、latin1/cp1251/etc ではなく、utf8 です。
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;
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にはいくつかの重要性があると述べています。
データベース自体の文字セット エンコーディングを UTF-8 に変更するには、mysql> プロンプトで次のコマンドを入力します。USE ALTER DATABASE
.. DBNAME をデータベース名に置き換えます。
ALTER DATABASE DBNAME CHARACTER SET utf8 COLLATE utf8_general_ci;
これはこの質問の複製ですMySQL データベースの文字セットと照合順序全体を UTF-8 に変換する方法は?
を設定してdatabase collation
から、データベースのデフォルトUTF-8
に適用します。table collation
これは私のために働いた:
mysqli_query($connection, "SET NAMES 'utf8'");
あなたの答えは、MySql 設定で構成できるということです。私の回答では、文脈から外れているかもしれませんが、これはあなたの助けになることもわかっています.
設定方法Character Set
とCollation
.
デフォルトの MySQL 文字セットと照合 (
latin1, latin1_swedish_ci
) を使用してデータを保存するアプリケーションの場合、特別な構成は必要ありません。アプリケーションが別の文字セットまたは照合順序を使用してデータ ストレージを必要とする場合、文字セット情報をいくつかの方法で構成できます。
- データベースごとに文字設定を指定します。たとえば、あるデータベースを使用するアプリケーションには が必要な場合があり
utf8
、別のデータベースを使用するアプリケーションには sjis が必要な場合があります。 - サーバーの起動時に文字設定を指定します。これにより、サーバーは、他の取り決めを行わないすべてのアプリケーションに対して指定された設定を使用します。
- ソースから MySQL をビルドする場合は、構成時に文字設定を指定します。これにより、サーバーは、サーバーの起動時に指定する必要なく、すべてのアプリケーションに対して指定された設定を使用します。
utf8 character set を設定する質問の例をここに示します。ここでは、より役立つように照合を設定します(utf8_general_ci
collation` )。
データベースごとに文字設定を指定する
CREATE DATABASE new_db
DEFAULT CHARACTER SET utf8
DEFAULT COLLATE utf8_general_ci;
サーバーの起動時に文字設定を指定する
[mysqld]
character-set-server=utf8
collation-server=utf8_general_ci
MySQL の構成時に文字設定を指定する
shell> cmake . -DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci
接続に適用される文字セットと照合システム変数の値を確認するには、次のステートメントを使用します。
SHOW VARIABLES LIKE 'character_set%';
SHOW VARIABLES LIKE 'collation%';
これは長い答えかもしれませんが、すべての方法があります。私の答えがお役に立てば幸いです。詳細についてはhttp://dev.mysql.com/doc/refman/5.7/en/charset-applications.html
UTF-8 へのデータベース接続
$connect = mysql_connect('$localhost','$username','$password') or die(mysql_error());
mysql_set_charset('utf8',$connect);
mysql_select_db('$database_name','$connect') or die(mysql_error());
データベース接続を UTF8 に設定します。
if($handle = @mysql_connect(DB_HOST, DB_USER, DB_PASS)){
//set to utf8 encoding
mysql_set_charset('utf8',$handle);
}
SET NAMES UTF8
これはトリックです
解決策を見つけることができました。http://technoguider.com/2015/05/utf8-set-up-in-mysql/で指定されているように、以下を実行しました
SET NAMES UTF8;
set collation_server = utf8_general_ci;
set default-character-set = utf8;
set init_connect = ’SET NAMES utf8′;
set character_set_server = utf8;
set character_set_client = utf8;