6

我正在使用 PHP 解析一些数据并将其放入 MySQL。但是,如果数据包含特殊字符,例如êm-KhêMySQL,则会输出以下错误:

SQLSTATE[HY000]: General error: 1366 Incorrect string value: '\xEAm-Kh\xEA...'

经过我的测试,MySQL 不是问题。(表和列排序规则是utf8_general_ci)当我êm-Khê直接(手动)将该字符串插入表中时,它会进入表中。所以 MySQL 可以接受这些数据。

那么知道为什么它会在 PHP 级别出现此错误吗?

我对编码知识不太了解,也不太了解。

  • 为什么它在查询中ê转换为\xEA

所以当我得到这样的数据时ê,我怎么能把它放到数据库中,因为它ê没有改变?

4

3 回答 3

3

所以问题是您的数据库连接不是 UTF8,但可能是 LATIN1,所以您必须使用 PHP 的函数utf8_encode()SET NAMES utf8在连接到数据库后执行。

$handle = new PDO("mysql:host=localhost;dbname=dbname",
'username', 'password',
array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));

这个线程有一些很好的参考和解释

于 2012-10-05T05:43:07.253 回答
0

我的猜测是 PHP 和 MySQL 之间存在编码不匹配。ê并没有真正“转换”成\xEA,只是 MySQL 不知道字节序列EA应该是什么,因此只是抱怨原始字节是错误的。您首先需要知道 PHP 中字符串的编码是什么;这取决于他们来自哪里。然后您需要设置正确的 MySQL 连接编码,以便 MySQL 知道您发送它的字符串的编码是什么。如何做到这一点取决于您连接到数据库的方式。

有关整个过程的概要,请参阅在 Web 应用程序中从前到后处理 Unicode 。

于 2012-10-05T05:43:02.780 回答
-1

你可以使用这个功能。mysql_real_escape_string($user), mysql_real_escape_string($password));

于 2013-03-01T14:17:26.927 回答