我正在使用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?因此,当我获得像ê这样的数据时,如何将其放入数据库,因为它是ê不变的?
发布于 2012-10-05 05:43:07
因此,问题是您的db连接不是UTF8,而是可能是LATIN1,所以您必须在连接到数据库后使用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-05 05:43:02
我的猜测是,PHP和MySQL之间存在编码不匹配。ê并没有真正被“转换”为\xEA,只是MySQL不知道EA应该是什么字节序列,因此只是抱怨原始字节是错误的。首先,您需要知道PHP中字符串的编码方式;这取决于字符串来自何处。然后,您需要设置正确的MySQL连接编码,以便MySQL知道要发送它的字符串是什么编码。如何做到这一点取决于您如何准确地连接到数据库。
有关整个过程的详细情况,请参见在Web应用程序中处理Unicode前端回退。
发布于 2013-03-01 14:17:26
您可以使用此函数。mysql_real_escape_string($user)、mysql_real_escape_string($password);
https://stackoverflow.com/questions/12740054
复制相似问题