質問
次のデータがあります。Trollhättan
ヘッダーを印刷してセットアップした場合
utf-8
, 、これはブラウザの出力です。設定していない場合
utf-8
ヘッダーで、Trollhättan
. 。ただし、データをデータベースに保存して確認するときはphpmyadmin
, 、次の文字列を取得しています:Trollhãƒâ¤ttan。ヘッダーを設定しているとき
utf-8
, 、私はこの文字列を取得しています:Trollhättan
これの横にTrollhättan
.
テーブルはあるので latin1_swedish_ci
, 、テーブルで使用する必要がありますか UTF-8
?
解決
UTF-8に基づく照合のリストは次のとおりです
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)
latin1_swedish_ci
Latin1に属します
mysql> select * from information_schema.collations where COLLATION_NAME = 'latin1_swedish_ci';
+-------------------+--------------------+----+------------+-------------+---------+
| COLLATION_NAME | CHARACTER_SET_NAME | ID | IS_DEFAULT | IS_COMPILED | SORTLEN |
+-------------------+--------------------+----+------------+-------------+---------+
| latin1_swedish_ci | latin1 | 8 | Yes | Yes | 1 |
+-------------------+--------------------+----+------------+-------------+---------+
1 row in set (0.03 sec)
照合に最も近いUTF8はID 200です
mysql> select * from information_schema.collations where ID = 200;
+-----------------+--------------------+-----+------------+-------------+---------+
| COLLATION_NAME | CHARACTER_SET_NAME | ID | IS_DEFAULT | IS_COMPILED | SORTLEN |
+-----------------+--------------------+-----+------------+-------------+---------+
| utf8_swedish_ci | utf8 | 200 | | Yes | 8 |
+-----------------+--------------------+-----+------------+-------------+---------+
1 row in set (0.00 sec)
警告
LATIN1を試し、テーブル内の個々の列の文字セットと照合を変更する必要がある場合があります。少なくとも、phpMyAdminの表示にはlatin1を使用します。
Tweekを使用して、データベース全体を特定の文字セットにし、照合することができます。 データベースを変更します.
ALTER DATABASE dbname CHARACTER SET utf8 COLLATE utf8_general_ci;
データベースのバックアップを作成し、DEV/ステージングDBにロードしてから、DEV/ステージングに対してAlterデータベースを実行してください。
他のヒント
「データベースにデータを保存する」ときに、 クライアント 使用するのはUTF8を使用しています。次に、HTTPヘッダーをUTF8に設定すると、往復が完了します。
驚いたことに、データベースで使用されている文字セットはそれほど重要ではないということです(ただし、UTF8であることも便利かもしれません)。