我正在使用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
? 所以,当我得到像ê
这样的数据时,我怎么能把它放到数据库中,因为ê
不变?
答案 0 :(得分: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"));
This thread有一些很好的参考和解释
答案 1 :(得分:0)
我的猜测是PHP和MySQL之间存在编码不匹配。 ê
并未真正“转换”为\xEA
,只是MySQL不知道字节序列EA
应该是什么,因此只是抱怨原始字节错误。您需要先了解PHP中字符串的编码方式;这取决于他们来自哪里。然后你需要设置正确的MySQL连接编码,这样MySQL知道你发送的字符串的编码是什么。如何做到这一点取决于你连接到数据库的确切程度。
答案 2 :(得分:-1)
你可以使用这个功能。 mysql_real_escape_string($用户), mysql_real_escape_string($密码));