PHPを使用してMySQLデータベースを操作する場合、特に中国語またはその他のマルチバイト文字に関しては、文字セットの設定に注意を払う必要があります。不適切な文字セット設定は、文字化けコードまたはデータストレージエラーにつながる可能性があります。文字セットの場合、PHPのMySQLI拡張機能はMySQLI :: get_charset関数を提供しますが、MySQLコマンドラインツール(CLI)では、通常、 「Character_set_%」などのshow変数を使用して関連変数を表示します。
この記事では、2つの深さの違いを分析して、開発者が自分の用途と違いを理解できるようにします。
mysqli :: get_charset()は、PHPのmysqliオブジェクトの方法であり、現在の接続の文字セット情報を取得するために使用されます。
次のプロパティを含むオブジェクトを返します。
Charset : UTF8MB4など、現在接続されている現在接続されている文字セット名
照合:照合、例えばUTF8MB4_GENERAL_CI
dir :文字セット定義ファイルのディレクトリ(通常は空)
min_length 、 max_length 、 number 、 state :内部で使用されている文字セット情報
たとえば、コードを使用して、現在の接続文字セットを取得します。
<?php
$mysqli = new mysqli('m66.net', 'user', 'password', 'database');
if ($mysqli->connect_error) {
die('接続に失敗しました: ' . $mysqli->connect_error);
}
$charsetInfo = $mysqli->get_charset();
echo '現在の文字セット: ' . $charsetInfo->charset . PHP_EOL;
echo 'ソートルール: ' . $charsetInfo->collation . PHP_EOL;
$mysqli->close();
?>
この方法は、MySQLI_SET_CHARSET()設定またはデフォルト値に相当する現在のPHP MySQLI接続オブジェクトの文字設定設定を対象としています。
MySQL CLIまたは他のSQLツールで、
次のコマンドを使用して、現在のMySQLサーバーの文字セット関連変数を表示できます。
SHOW VARIABLES LIKE 'character_set_%';
これには、次のような一連の構成がリストされています。
character_set_client :クライアントからサーバーに送信された文字セット
character_set_connection :サーバー解析ステートメントの文字セット
character_set_database :現在のデフォルトデータベースの文字セット
character_set_results :クエリ結果の文字セットはサーバーによって返されます
character_set_server :サーバーデフォルトの文字セット
Character_set_system :システムメタデータ文字セット
これらの変数には、PHP接続だけでなく、サーバーレベルとセッションレベルの文字セットの両方が含まれます。
たとえば、CLIで実行してください:
mysql> SHOW VARIABLES LIKE 'character_set_%';
あなたは見るかもしれません:
variable_name | 価値 |
---|---|
character_set_client | UTF8MB4 |
Chariture_set_connection | UTF8MB4 |
character_set_database | UTF8MB4 |
character_set_results | UTF8MB4 |
Character_set_server | UTF8MB4 |
Character_set_system | UTF8 |
この情報は、現在のMySQLインスタンスとセッションの文字セット構成をより完全に反映しています。
比較ポイント | mysqli :: get_charset | 「character_set_%」のような変数を表示します |
---|---|---|
オブジェクトを表示します | phpのmysqli接続オブジェクト | MySQLサーバーの構成とセッションパラメーター |
範囲を取得します | キャラクターセットと現在接続されているようなもの | サーバーとセッションの複数の文字セット変数 |
取得方法 | PHPメソッド | SQLステートメント |
使用 | mysqliオブジェクトで使用されている文字セットを確認します | MySQLレベルの文字セット(クライアント、接続、データベースなど)を表示および調整します |
衝撃の範囲 | このPHP接続のみに影響します | グローバル/現在のセッション、マルチクライアント共有 |
簡単に言えば、 mysqli :: get_charset()はPHPの一端です。
「character_set_%」のような変数を表示することは、データベースサーバー全体です。
多言語または多地域がサポートするアプリケーションを開発するとき、
クライアント(PHP)、接続、データベース、サーバーの文字セットが一貫していることを確認してください。
それは、文字化けのコードを避けるための鍵です。
例えば:
phpでmysqli_set_charset( 'utf8mb4')を設定できます。
しかし、データベースの文字_set_databaseはまだlatin1です。
この場合に保存されているデータには問題がある場合があります。
mysqli :: get_charset()を介して、PHP接続層が正常に設定されているかどうかを確認できます。
また、 「Character_set_%」などの変数を表示することで、サーバーとデータベースのデフォルト設定を確認できます。
2つを組み合わせることによってのみ、文字セットリンクを完全に把握できます。
mysqli :: get_charset()および「character_set_%」のような変数を表示する
開発者が文字セットの問題をトラブルシューティングするための2つの強力なツールです。
1つはクライアント(PHP)側にあり、1つはサーバー(MySQL)側にあります。
両者の違いと関係を理解する、
高品質で文字化けされたアプリケーションを書くのに役立つだけでなく、
また、クロスシステムデータの流れのトラブルシューティング時に、より多くの手がかりを提供できます。
覚えておいてください:文字セットの一貫性は体系的なプロジェクトです。
PHPまたはMySQLの片側に構成の問題だけではありません。