sql >> データベース >  >> RDS >> Mysql

ずっとUTF-8

    データストレージ

    • utf8mb4を指定します データベース内のすべてのテーブルとテキスト列の文字セット。これにより、MySQLはUTF-8でネイティブにエンコードされた値を物理的に保存および取得します。 MySQLは暗黙的にutf8mb4を使用することに注意してください utf8mb4 _ *の場合のエンコード 照合が指定されています(明示的な文字セットはありません)。

    • 古いバージョンのMySQL(<5.5.3)では、残念ながら、単に utf8を使用する必要があります。 、Unicode文字のサブセットのみをサポートします。冗談でよかったのに。

    データアクセス

    • アプリケーションコード(PHPなど)では、使用するDBアクセス方法に関係なく、接続文字セットを utf8mb4に設定する必要があります。 。このように、MySQLは、データをアプリケーションに渡したり、その逆を行ったりするときに、ネイティブUTF-8からの変換を行いません。

    • 一部のドライバーは、接続文字セットを構成するための独自のメカニズムを提供します。これは、独自の内部状態を更新し、接続で使用されるエンコードをMySQLに通知します。これは通常推奨されるアプローチです。 PHPの場合:

    • ドライバが接続文字セットを設定するための独自のメカニズムを提供しない場合は、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仕様では、クライアントはデフォルトでサーバーが提供する文字セットに関係なくフォームをサーバーに返送する必要があると規定されていますが、これは明らかに推奨事項にすぎないため、すべての タグ。

    その他のコードに関する考慮事項

    • もちろん、提供するすべてのファイル(PHP、HTML、JavaScriptなど)は、有効なUTF-8でエンコードする必要があります。

    • UTF-8文字列を処理するたびに、安全に処理することを確認する必要があります。残念ながら、これは難しい部分です。 PHPの mbstring 拡張機能。

    • PHPの組み込みの文字列操作はではありません デフォルトではUTF-8は安全です。 通常のPHP文字列操作(連結など)で安全に実行できることがいくつかありますが、ほとんどの場合、同等の mbstringを使用する必要があります。 機能。

    • あなたが何をしているのかを知るために(読んでください:それを台無しにしないでください)、あなたは本当にUTF-8とそれが可能な限り低いレベルでどのように機能するかを知る必要があります。 utf8.com からのリンクを確認してください。 あなたが知る必要があるすべてを学ぶためのいくつかの良いリソースのために。



    1. postgresqlで変数の値を出力する

    2. IDENT_CURRENT()を使用して、SQLServerのID列の現在のID値を返します

    3. SQLServerのメッセージ8117「オペランドデータ型varcharが合計演算子に対して無効です」を修正しました

    4. 株式、ファンド、暗号通貨の取引のためのデータモデル