なぜそうなったのかはわかりませんが、環境に問題があることは間違いありません。私はdbを次のように宣言しました
CREATE DATABASE `mydb` /*!40100 DEFAULT CHARACTER SET latin1 */
次に、次のように宣言されたテーブルがあります
CREATE TABLE `myabstract_table` (
`key_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`varchar_field` varchar(128) NOT NULL
PRIMARY KEY (`key_id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
次に、この場合のphpコードには通常あります:
function execSQL($conn, $sql, $values = false) {
try {
$stmt = $conn->prepare($sql);
if ($values)
foreach($values as $param=>$value)
$stmt->bindValue($param, $value);
if ( ! $stmt->execute() ) {
error_log ("PDO Error: ".json_encode($stmt->errorInfo()));
return false;
}
} catch (PDOException $e) {
error_log ("Exception: " . $e->getMessage());
return false;
}
return $stmt;
}
その後、文字列は(INSERTステートメントを介して)非ASCII記号の代わりに疑問符でdbに保存されます
PS。SQL リクエストの前に実行set names 'utf8'
します。すべての php は UTF-8 用に構成されています。html ドキュメント ヘッダーには、文字セットとして指定された UTF-8 のメタ タグが含まれています。私が試みなかった唯一のことは、スキーマ自体のデフォルトの文字セット (現在は latin1 です) を変更することです。これは問題ではないと確信しているためです。またはそれは?