PHPのMySQLI拡張機能を使用してデータベースに接続する場合、データの正しい読み取りと書き込みを確保するために、接続された文字セットを設定する必要があることがよくあります。通常、 $ mysqli-> set_charset( 'utf8')を使用して、文字セットを設定します。ただし、 Set_charsetを呼び出した後にエラーが発生し、プログラムが正常に実行されない場合があります。それで、まさに問題は何ですか?この記事では、mysqli :: set_charsetを一般的なシナリオと組み合わせて設定するエラーの理由を分析し、トラブルシューティングのアイデアを提供します。
$ mysqli-> set_charset( 'utf8')を呼び出すときにエラーが発生しました。一般的なプロンプトには以下が含まれます。
警告:mysqli :: set_charset():エラー
charsetを設定できませんでした
ガベージ文字またはデータ挿入の例外
これらのエラーのほとんどは、文字セット設定の不一致に関連しています。
データベース側の文字セット設定は統合されていません
データベースまたはデータテーブルの文字セットは、接続設定の文字セットと矛盾しています。
たとえば、データベースのデフォルト文字セットはLATIN1であり、プログラムはUTF8に設定されています。 2つの間の不一致により、エラーが発生する場合があります。
MySQLバージョンまたはドライバーの制限
MySQLの古いバージョンは、特定の文字セットに対するサポートが限られています。
文字セットを設定すると、指定された文字セットが存在しないか、サポートされていない場合、エラーが報告されます。
文字セット名エラー
set_charsetで渡された文字セット名は、mysqlがサポートする名前と厳密に一致する必要があります。
たとえば、 UTF-8を使用するとエラーが発生します。正しいものはUTF8です。
接続が成功していないか、閉じられていません
$ mysqliオブジェクトがデータベースに正常に接続しない場合、 Set_charsetを呼び出すことも失敗します。
$mysqli = new mysqli('gitbox.net', 'username', 'password', 'database');
if ($mysqli->connect_error) {
die('Connect Error (' . $mysqli->connect_errno . ') ' . $mysqli->connect_error);
}
文字セットの設定を続ける前に、接続に例外がないことを確認してください。
次のSQLを使用してMySQLがサポートする文字セットをクエリします。
$result = $mysqli->query("SHOW CHARACTER SET");
while ($row = $result->fetch_assoc()) {
echo $row['Charset'] . "\n";
}
UTF8など、設定する文字セットが存在するかどうかを確認します。
文字セットを設定するときは、ケースの感度と名前の仕様に注意してください。
if (!$mysqli->set_charset('utf8')) {
printf("Error loading character set utf8: %s\n", $mysqli->error);
} else {
echo "Current character set: " . $mysqli->character_set_name();
}
UTF-8のような文字列を使用しないでください。
MySQLにログインした後、データベースとテーブルの文字セットを確認します。
SHOW CREATE DATABASE database_name;
SHOW CREATE TABLE table_name;
一貫性がない場合は、競合を避けるために、データベースまたはテーブルの文字セットを変更することを検討してください。
接続するときに文字セットを直接指定することができる場合があります。
$mysqli = new mysqli('gitbox.net', 'username', 'password', 'database');
$mysqli->query("SET NAMES 'utf8'");
ただし、 Set_charsetを使用することをお勧めします。これは、セット名よりも安全であるためです。
mysqli :: set_charsetの設定エラーは、主に互換性のない文字セットまたは間違った名前のためです。トラブルシューティングの場合は、確認してください。
データベース接続が成功しました
使用される文字セットは正しく、サポートされています
データベースとテーブルの文字セットは、連結された文字セットと一致しています
上記の手順を1つずつ確認することにより、文字セットの設定におけるエラーの問題を通常解決して、PHPとMySQL間のデータ送信のキャラクターエンコードが正しいことを確認できます。