【发布时间】:2013-07-04 15:37:06
【问题描述】:
我今天正在处理一些棘手的事情...我有一个使用 UTF-8 编码和 utf8_general_ci 排序规则的 MySQL 数据库。所有特殊字符都正确插入,但不是日文。这是我用来插入新行的代码:
$dbConnection = new PDO("mysql:host=000.000.000.000;dbname=db_name", "db_user", "db_pass", array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'utf8'"));
$dbConnection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$dbConnection->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$parameterArray = array();
$parameterArray[":1"] = utf8_encode($message);
$queryResult = $dbConnection->prepare(QUERY_USERS_INSERT_MESSAGE);
$queryResult->execute($parameterArray);
在插入拉丁字符时一切正常,即使是像ñ,à,ë,...这样的特殊字符,但是当我尝试插入像たなは这样的日文字符时,MySQL会插入NULL...
有什么想法吗?我已经在谷歌上搜索了几个小时......
【问题讨论】:
-
在字符串上使用
utf8_encode是可疑的,不应该对日文字符串做任何好事。另外,字符串是从哪里来的?它是什么编码的?或许可以看到Handling Unicode Front To Back In A Web App 和What Every Programmer Absolutely, Positively Needs To Know About Encodings And Character Sets To Work With Text。 -
您是否尝试调试过您的代码?
-
是的,我已经调试了我的代码。该字符串来自客户端软件,采用 UTF8 编码。
-
将
utf8_encode应用于 UTF-8 编码的字符串是一个错误。 -
那么,来自客户端的字符串是唯一发生的事情吗?