我有一个PHP脚本,它接受POST参数并将它们保存到数据库中。脚本本身工作正常,但如果任何POST参数包含希伯来语文本,我会收到以下错误:
error number 1366: Incorrect string value: '\xF2\xE9\xE3\xE5 \xF7...' for column 'Name' at row 1
列定义是:
`Name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
表和数据库也定义为CHARACTER SET utf8 COLLATE utf8_general_ci。此外,在运行之前,会对查询执行stripslashes。
奇怪的是原始列定义不包括CHARACTER SET和COLLATE。当它没有那些时,通过MySQL Workbench运行带有希伯来字符的相同插入语句给我带来了同样的错误 - 但仅作为警告。然后我将CHARACTER SET和COLLATE参数添加到列定义中,重建了表并通过Workbench再次运行我的查询 - 一切都很好。
...但PHP脚本仍然会返回此错误。
有谁知道为什么会这样?我可以在SQL语句本身中禁止警告,以便忽略这些警告吗?
编辑: PHP代码:
function dbConnect() {
global $host, $user, $pwd, $db, $MYSQL_ERRNO, $MYSQL_ERROR;
$dbConn = mysql_connect($host,$user,$pwd);
if (!$dbConn) {
$MYSQL_ERRNO = 0;
$MYSQL_ERROR = "Could not connect to $host";
return false;
} else if ($db && !mysql_select_db($db)) {
$MYSQL_ERRNO = mysql_errno();
$MYSQL_ERROR = mysql_error();
return false;
} else {
return $dbConn;
}
}
$link = dbConnect() or die(sql_error());
$query="INSERT INTO maillist (Name,LastName,email,status,sex,City,date_added) VALUES (N'".filter_var($_POST['Name'], FILTER_SANITIZE_STRING, FILTER_FLAG_NO_ENCODE_QUOTES)."',N'',N'".filter_var($_POST['email'], FILTER_SANITIZE_EMAIL)."','0',N'',N'',CURDATE())";
$query = stripslashes($query);
$result = mysql_query($query,$link) or die(sql_error());
答案 0 :(得分:0)
标记已解决,我找到了解决方案。
是的。
的[mysqld] character-set-server = utf8应更改为latin1
重启mysql