不知道爲什麼會發生,環境肯定有問題。 我已經分貝聲明什麼可能會導致問號而不是非ASCII符號?
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語句)db用代替非ASCII符號
PS。我在執行任何sql請求之前執行set names 'utf8'
,所有php的東西都被配置爲UTF-8,html文檔頭包含帶UTF-8的元標記,並被規定爲字符集; 我沒有嘗試的唯一的事情就是改變模式本身的默認字符集(它目前是latin1),因爲我很確定它沒有問題。或者是?
這一切都是因爲整理使用'utf8_general_ci'無處不在。 –
@Yogesh校對與* encoding *不同,他已經使用'utf8'作爲編碼了! – deceze
您的數據是否以UTF-8編碼?請參閱[在Web應用程序中處理Unicode前後](http://kunststube.net/frontback/)。 – deceze