我有一个具有UTF-8字符集的MySQL表,在试图通过PHP向其插入时,数据库会给出以下错误:
PDOStatement::execute():SQLSTATEHY000: General error: 1366不正确的字符串值:‘\xE8 8’代表列.
问题中的字符是“è”,但考虑到数据库和表被设置为UTF-8,我不明白为什么这会是一个问题。
编辑
我已经从mysql终端直接尝试并遇到了同样的问题。
发布于 2010-04-11 01:07:55
E8大于单字节UTF8字符:http://en.wikipedia.org/wiki/UTF-8中的最大可用字符7F。
似乎您的连接不是设置为UTF8,而是一些其他8位编码,如ISO拉丁文。如果将数据库设置为UTF8,则只更改数据库内部使用的字符集,连接可能位于不同的默认值(对于较早的MySQL版本,则为latin1),因此在连接到数据库后应尝试发送初始SET CHARACTER SET utf-8。如果您可以访问my.cnf,也可以在其中设置正确的默认值,但请记住,更改默认值可能会破坏在同一主机上运行的任何其他站点/应用程序。
发布于 2010-04-11 01:23:05
您的数据库可能设置为UTF-8,但数据库连接也需要设置为UTF-8。您应该使用SET NAMES utf8语句来实现这一点。您可以使用PDO中的driver_options让它在连接之后立即执行:
$handle = new PDO("mysql:host=localhost;dbname=dbname",
'username', 'password',
array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));有关确保整个站点正确使用UTF-8的更详细信息,请查看以下两个链接:
发布于 2013-07-31 06:03:37
在将值传递给Mysql之前,可以使用以下代码:
$val = mb_check_encoding($val, 'UTF-8') ? $val : utf8_encode($val);
如果字符串只涉及一个字段,则将字符串转换为UTF-8。
https://stackoverflow.com/questions/2615611
复制相似问题