MySQL 文字セットの問題の詳細な説明 (図)

黄舟
リリース: 2017-03-18 14:34:49
オリジナル
1283 人が閲覧しました

最近、会社の古いプロジェクトで絵文字表現をサポートする必要がありました。最初はデータベースのテーブル フィールドを変更するだけだと思っていましたが、予想外に一連の問題が発生しました。メモ用にまとめておきます。

01 MySQL 文字セット設定

MySQL 文字セットの問題の詳細な説明 (図)

character_set_server: デフォルトの内部動作文字セット
character_set_client: クライアントソースによって使用される文字セットdata
character_set_connection: 接続レイヤー文字set
character_set_results: クエリ結果の文字 set
character_set_database: 現在選択されているデータベースのデフォルトの文字セット
character_set_system: システムメタデータ (フィールド名など) 文字セット

02 MySQL での文字セット変換処理

  • MySQL Server コレクション Convertリクエスト時に character_set_client から character_set_connection にリクエスト データを変換します。 character_set_client 转换为character_set_connection

  • 进行内部操作前将请求数据从 character_set_connection 转换为内部操作字符集,其确定方法如下:

    • 使用表中字段的 CHARACTER SET 设定值;

    • 若上述值不存在,则使用对应数据表的 DEFAULT CHARACTER SET 设定值(MySQL扩展,非SQL标准);

    • 若上述值不存在,则使用对应数据库的 DEFAULT CHARACTER SET 设定值;

    • 若上述值不存在,则使用 character_set_server 设定值。

  • 将操作结果从内部操作字符集转换为 character_set_results, 响应请求。

03 MySQL 启动配置文件 my.cnf

MySQL 文字セットの問題の詳細な説明 (図)

default-character-set: 设置 mysql 命令行连接的默认字符集
character-set-server: 设置系统内部操作字符集(即上文说到的character_set_server)
collation_server: 设置系统默认字符集排序

04 PHP连接 MySQL(以PDO连接方式为例)

常见的两种设置字符集的方式

  • mysql:host=localhost;dbname=db_demo;charset=utf8mb4

  • PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8mb4"

05 总结

  • 数据表字段的字符集需要是utf8mb4,这个是刚需

  • 一般 character_set_clientcharacter_set_connectioncharacter_set_results 的字符集相同,且都为utf8mb4(这三个参数默认都是utf8mb4,如果不是,是实现不了 emoji 表情的,原因参照字符集转换过程)。

  • 连接数据库的字符集也需要是utf8mb4

  • character_set_servercharacter_set_database

  • 内部操作を実行する前に、リクエスト データを character_set_connection から内部操作に変換します。 set は次のように決定されます:

    テーブル内のフィールドの CHARACTER SET 設定値を使用します 🎜🎜🎜 🎜上記の値が存在しない場合は、対応するデータテーブルの DEFAULT CHARACTER SET 設定値を使用します (MySQL 拡張機能、非 SQL 標準)。 🎜🎜🎜🎜上記の値が存在しない場合は、DEFAULT CHARACTER SET 設定値を使用します。対応するデータベースの 🎜🎜🎜🎜 上記の値が存在しない場合は、character_set_server を使用して値を設定します。 🎜🎜🎜🎜🎜リクエストに応じて、内部演算文字セットから演算結果をcharacter_set_resultsに変換します。 🎜🎜🎜🎜03 MySQL の起動設定ファイル 🎜 my.cnf🎜🎜MySQL 文字セットの問題の詳細な説明 (図)🎜🎜default-character-set: mysql コマンドライン接続のデフォルトの文字セットを設定します🎜character-set-server:システム内部操作の文字セットを設定します (つまり、上記のcharacter_set_server)🎜collat​​ion_server: システムのデフォルトの文字セットのソートを設定します🎜🎜04 MySQLへのPHP接続(PDO接続方法を例にします)🎜🎜文字セットを設定する2つの一般的な方法🎜🎜 🎜 🎜mysql:host=localhost;dbname=db_demo;charset=utf8mb4🎜🎜🎜🎜PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8mb4"🎜🎜🎜🎜05 概要🎜🎜🎜🎜データ テーブルフィールドの文字セットする必要があるutf8mb4 です。これは必要なだけです🎜🎜🎜🎜通常、character_set_clientcharacter_set_connection、および character_set_results の文字セットは、 > は同じで、すべて utf8mb4 です (デフォルトでは、これら 3 つのパラメータはすべて utf8mb4 です。そうでないと絵文字表現が実現できません。理由については、を参照してください)文字セット変換プロセス)。 🎜🎜🎜🎜データベースに接続するための文字セット 🎜 も utf8mb4 である必要がありますcode>🎜🎜 🎜🎜<code>character_set_servercharacter_set_database、およびその他のデフォルトの文字セット タイプはそれほど重要ではありませんが、一貫性を保つことが最善です🎜🎜🎜🎜 確かにたくさんありますTP には落とし穴があるので、TP には近づかないでください🎜 🎜🎜

    以上がMySQL 文字セットの問題の詳細な説明 (図)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

    関連ラベル:
    ソース:php.cn
    このウェブサイトの声明
    この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
    最新の問題
    人気のチュートリアル
    詳細>
    最新のダウンロード
    詳細>
    ウェブエフェクト
    公式サイト
    サイト素材
    フロントエンドテンプレート