奇怪的MySQL字符集故障:错误号1366:字符串值不正确

时间:2013-12-10 19:11:57

标签: php mysql character-encoding

我有一个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());

1 个答案:

答案 0 :(得分:0)

标记已解决,我找到了解决方案。

是的。

的[mysqld] character-set-server = utf8应更改为latin1

重启mysql