首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >UTF-8数据库问题

UTF-8数据库问题
EN

Stack Overflow用户
提问于 2010-04-11 00:41:39
回答 3查看 7.5K关注 0票数 4

我有一个具有UTF-8字符集的MySQL表,在试图通过PHP向其插入时,数据库会给出以下错误:

PDOStatement::execute():SQLSTATEHY000: General error: 1366不正确的字符串值:‘\xE8 8’代表列.

问题中的字符是“è”,但考虑到数据库和表被设置为UTF-8,我不明白为什么这会是一个问题。

编辑

我已经从mysql终端直接尝试并遇到了同样的问题。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 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,也可以在其中设置正确的默认值,但请记住,更改默认值可能会破坏在同一主机上运行的任何其他站点/应用程序。

票数 1
EN

Stack Overflow用户

发布于 2010-04-11 01:23:05

您的数据库可能设置为UTF-8,但数据库连接也需要设置为UTF-8。您应该使用SET NAMES utf8语句来实现这一点。您可以使用PDO中的driver_options让它在连接之后立即执行:

代码语言:javascript
复制
$handle = new PDO("mysql:host=localhost;dbname=dbname",
    'username', 'password', 
    array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));

有关确保整个站点正确使用UTF-8的更详细信息,请查看以下两个链接:

票数 2
EN

Stack Overflow用户

发布于 2013-07-31 06:03:37

在将值传递给Mysql之前,可以使用以下代码:

$val = mb_check_encoding($val, 'UTF-8') ? $val : utf8_encode($val);

如果字符串只涉及一个字段,则将字符串转换为UTF-8。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2615611

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档