【问题标题】:PHP / Mysql special character inserts being truncatedPHP / Mysql 特殊字符插入被截断
【发布时间】:2012-02-23 12:49:12
【问题描述】:

我在将带有特殊字符的单词插入数据库时​​遇到问题。这个词似乎在特殊字符处被截断。

我使用的是 MySQL 5.1.41,我的数据库上的排序规则是 utf8_general_ci。我正在使用 PDO 来促进数据库交互。

这是我正在做的一个例子。

//$db is a PDO object
$db->setAttribute(PDO::MYSQL_ATTR_INIT_COMMAND, "SET NAMES 'utf8'");
//word with a special character 
$word = "pépite";
$sql = "INSERT INTO keyword(key_name) VALUES(?)";
$stmt = $db->prepare($sql);
$stmt->execute(array($word));

执行此操作时,我的数据库中只出现“p”,似乎字符 é 以及它被截断后的所有内容。我不确定我在这里做错了什么。如果有人可以建议我做错了什么,将不胜感激。谢谢!

【问题讨论】:

  • 您是否正在使用mysqli PHP 客户端而不是mysql 客户端?
  • 是每次只截掉一个字符,还是只存储直到特殊字符的所有内容?

标签: php mysql utf-8 pdo


【解决方案1】:

试试这个

$db->setAttribute(PDO::MYSQL_ATTR_INIT_COMMAND, "SET NAMES 'utf8'");
$word = utf8_encode('pépite');
$sql = "INSERT INTO keyword(key_name) VALUES(?)";
$stmt = $db->prepare($sql);
$stmt->execute(array($word));

utf8_encode | utf8_decode

【讨论】:

  • 是的,非常感谢。你能告诉我为什么我需要编码为utf8,字符串不是已经是utf8了吗?
  • 不,您必须使用该函数对特殊字符(如 ñáéíóú...)进行编码。我来自阿根廷(我的母语是西班牙语)所以我总是有这个问题:) 例如 é = é in UTF8。
猜你喜欢
  • 2014-11-17
  • 2010-11-25
  • 1970-01-01
  • 2014-03-18
  • 2012-04-25
  • 2012-10-17
  • 2016-04-16
  • 2015-04-21
  • 1970-01-01
相关资源
最近更新 更多