mysqli :: character_set_nameは、現在のデータベース接続で使用されている文字セット名を返すPHPのmysqli拡張機能のメソッドです。この方法のプロトタイプは次のとおりです。
string mysqli::character_set_name ( void )
これは、SQL操作を実行する前にそれを呼び出すことができ、接続で使用される文字セットがデータベース構成と一致していることを確認できます。
MySQLは、 UTF8 、 UTF8MB4 、 LATIN1などの複数の文字セットをサポートします。一貫性のない文字セットは、次の問題につながる可能性があります。
漢字は文字化けしているか、切り取られています
多言語コンテンツを含むクエリを正しく実行できません
データがデータベースに書き込まれて再度読み取られた後に例外が発生しました
特にMySQLのデフォルトの文字セットがPHPで使用される文字セットと一致しない場合、問題は特に一般的です。したがって、接続が確立されてから時間内に設定された文字セットを検証することをお勧めします。
現在接続されている文字設定を検出および確認するための完全な例を次に示します。
<?php
$mysqli = new mysqli("localhost", "user", "password", "database");
// 接続が成功しているかどうかを確認してください
if ($mysqli->connect_errno) {
die("接続に失敗しました: " . $mysqli->connect_error);
}
// 現在接続されている文字セットを取得します
$currentCharset = $mysqli->character_set_name();
echo "現在の接続で使用される文字セットはです: " . $currentCharset;
// 予想される文字セットであるかどうかを確認してください,例えば utf8mb4
if ($currentCharset !== 'utf8mb4') {
echo "キャラクターセットは一貫性がありません,ASの設定 utf8mb4...";
if (!$mysqli->set_charset("utf8mb4")) {
die("文字セットの設定に失敗しました: " . $mysqli->error);
}
echo "キャラクターセットが更新されました: " . $mysqli->character_set_name();
}
?>
この例がデータベースに接続された後、最初に現在使用されている文字セットを出力します。 UTF8MB4でない場合は、文字セットをリセットしてみてください。 mysqli :: set_charsetおよびmysqli :: character_set_nameと協力することにより、文字セットが完全に一貫していることを確認します。
PHPで使用される文字セットがサーバー側のデフォルトの文字セットとまったく同じであることを確認する場合は、MySQLの構成ファイル(通常はmy.cnfまたはmy.ini )からデフォルト設定を読み取ることを検討してください。
たとえば、次のSQLクエリを使用して、サーバー側のデフォルトの文字設定設定を表示できます。
<?php
$result = $mysqli->query("SHOW VARIABLES LIKE 'character_set_server'");
$row = $result->fetch_assoc();
$serverCharset = $row['Value'];
echo "MySQLサーバーのデフォルト文字セットはです: " . $serverCharset;
if ($mysqli->character_set_name() !== $serverCharset) {
echo "检测到キャラクターセットは一貫性がありません,同期しようとしています...";
if (!$mysqli->set_charset($serverCharset)) {
die("文字セットの設定に失敗しました: " . $mysqli->error);
}
echo "文字セットは同期されています: " . $mysqli->character_set_name();
}
?>
このコードは、現在接続されている文字セットをチェックするだけでなく、サーバーのデフォルトの文字セットとも比較し、文字セットの設定を自動的に同期して、データの一貫性をさらに確保します。