データストレージ :
-
utf8mb4
を指定します データベース内のすべてのテーブルとテキスト列の文字セット。これにより、MySQLはUTF-8でネイティブにエンコードされた値を物理的に保存および取得します。 MySQLは暗黙的にutf8mb4
を使用することに注意してくださいutf8mb4 _ *
の場合のエンコード 照合が指定されています(明示的な文字セットはありません)。 -
古いバージョンのMySQL(<5.5.3)では、残念ながら、単に
utf8
を使用する必要があります。 、Unicode文字のサブセットのみをサポートします。冗談でよかったのに。
データアクセス :
-
アプリケーションコード(PHPなど)では、使用するDBアクセス方法に関係なく、接続文字セットを
utf8mb4
に設定する必要があります。 。このように、MySQLは、データをアプリケーションに渡したり、その逆を行ったりするときに、ネイティブUTF-8からの変換を行いません。 -
一部のドライバーは、接続文字セットを構成するための独自のメカニズムを提供します。これは、独自の内部状態を更新し、接続で使用されるエンコードをMySQLに通知します。これは通常推奨されるアプローチです。 PHPの場合:
-
PDO を使用している場合 PHP≥5.3.6の抽象化レイヤーでは、
charset
を指定できます DSN で :$dbh = new PDO('mysql:charset=utf8mb4');
-
mysqli を使用している場合 、
set_charset()
を呼び出すことができます :$mysqli->set_charset('utf8mb4'); // object oriented style mysqli_set_charset($link, 'utf8mb4'); // procedural style
-
単純な
mysql で立ち往生している場合 ただし、たまたまPHP≥5.2.3を実行している場合は、<を呼び出すことができます。 code> mysql_set_charset 。
-
-
ドライバが接続文字セットを設定するための独自のメカニズムを提供しない場合は、MySQLにクエリを発行して、アプリケーションが接続上のデータがエンコードされることをどのように期待するかを伝える必要があります。
SET NAMES'utf8mb4'
。 -
utf8mb4
に関する同じ考慮事項 /utf8
上記のように適用されます。
出力 :
-
アプリケーションが他のシステムにテキストを送信する場合は、文字エンコードについても通知する必要があります。 Webアプリケーションでは、データが送信されるエンコーディングをブラウザに通知する必要があります(HTTP応答ヘッダーまたはHTMLメタデータを介して) 。
-
PHPでは、
default_charsetを使用できます。
php.iniオプション、または手動でContent-Type
を発行します 自分でMIMEヘッダーを作成します。これは手間がかかりますが、同じ効果があります。 -
json_encode()
を使用して出力をエンコードする場合 、JSON_UNESCAPED_UNICODE
を追加します 2番目のパラメータとして。
入力 :
-
残念ながら、受信したすべての文字列を保存したり、どこでも使用したりする前に、有効なUTF-8であることを確認する必要があります。 PHPの
mb_check_encoding()
トリックを行いますが、あなたはそれを宗教的に使用しなければなりません。悪意のあるクライアントは任意のエンコーディングでデータを送信できるため、これを回避する方法は実際にはありません。PHPにこれを確実に実行させるためのトリックは見つかりませんでした。 -
現在の
HTML仕様 を読んだところ 、次のサブ箇条書きは、最新のHTMLには不要であるか、有効ではありません。私の理解では、ブラウザはドキュメントに指定された文字セットでデータを処理して送信します。ただし、古いバージョンのHTML(XHTML、HTML4など)をターゲットにしている場合は、次の点が役立つ場合があります。 - HTML5より前のHTMLの場合のみ :ブラウザから送信されるすべてのデータをUTF-8にする必要があります。残念ながら、これを確実に行う唯一の方法は、
accept-charset
を追加することです。 すべてのの属性 タグ:
- HTML5より前のHTMLの場合のみ :W3C HTML仕様では、クライアントはデフォルトでサーバーが提供する文字セットに関係なくフォームをサーバーに返送する必要があると規定されていますが、これは明らかに推奨事項にすぎないため、すべての
タグ。
- HTML5より前のHTMLの場合のみ :ブラウザから送信されるすべてのデータをUTF-8にする必要があります。残念ながら、これを確実に行う唯一の方法は、
その他のコードに関する考慮事項 :
-
もちろん、提供するすべてのファイル(PHP、HTML、JavaScriptなど)は、有効なUTF-8でエンコードする必要があります。
-
UTF-8文字列を処理するたびに、安全に処理することを確認する必要があります。残念ながら、これは難しい部分です。 PHPの
mbstring コード> 拡張機能。
-
PHPの組み込みの文字列操作はではありません デフォルトではUTF-8は安全です。 通常のPHP文字列操作(連結など)で安全に実行できることがいくつかありますが、ほとんどの場合、同等の
mbstring
を使用する必要があります。 機能。 -
あなたが何をしているのかを知るために(読んでください:それを台無しにしないでください)、あなたは本当にUTF-8とそれが可能な限り低いレベルでどのように機能するかを知る必要があります。 utf8.com からのリンクを確認してください。 あなたが知る必要があるすべてを学ぶためのいくつかの良いリソースのために。