使用%C3特殊字符时,数据输入mySQL被截断

时间:2014-02-18 16:08:02

标签: php mysql utf-8 character-encoding special-characters

我有以下查询:

 INSERT INTO `poll` (`pollId`, `groupId`, `creatorUserId`, `createdDateTime`, 
                     `lastVoteDateTime`, `pollQuestion`, `pollOption`) 
              VALUES (NULL, '24', '73', '2014-02-18 21:27:12', '0000-00-00 00:00:00', 
                      '1111111111', '222222222222Ã223442')

当使用php执行此查询时,pollOption插入的数据被截断,如222222222222,没有Ã223442;

但在myManager中执行时,pollOption的数据已成功插入“222222222222Ã223442”;

注意: 数据库,表和字段都是UTF-8。 php文件是ANSI编码

PHP代码:

date_default_timezone_set('Asia/Calcutta');
require_once "config.php";
error_reporting(0);
$date=date("Y-m-d H:i:s");
$response="";
if(isset($_REQUEST['userId']))
{
$userId=$_REQUEST['userId'];
$groupId=$_REQUEST['groupId'];
$pollQuestion=$_REQUEST['pollQuestion'];
$pollOptions=rawurldecode(htmlspecialchars($_REQUEST['pollOptions'])); 

$insertPoll=mysql_query("INSERT INTO `poll` 
                     (`pollId`, `groupId`, `creatorUserId`, 
                      `createdDateTime`, `lastVoteDateTime`, `pollQuestion`, `pollOption`) 
               VALUES (NULL, '$groupId', '$userId', '$date', '0000-00-00 00:00:00', 
                      '$pollQuestion', '$pollOptions')") or die(mysql_error());   
         echo("INSERT INTO `poll` 
                       (`pollId`, `groupId`, `creatorUserId`, `createdDateTime`, 
                        `lastVoteDateTime`, `pollQuestion`, `pollOption`) 
                       VALUES (NULL, '$groupId', '$userId', '$date', '0000-00-00 00:00:00', 
                        $pollQuestion', '$pollOptions')");
if($insertPoll)
{
    $response.='{"success":"0","message":"successfully poll posted"}';

}else
{
    $response.='{"success":"1","message":"something went wrong"}';
}


echo $response;     

}

1 个答案:

答案 0 :(得分:0)

你的php文件中的is肯定是拉丁语1×而不是UTF-8Ã。当提出latin-1扩展字符时,linux mysql会在找到第一个不正确的字符时截断,而windows mysql会给你一个错误。

如果它出现在latin-1中,请在您的违规字段中使用utf8_encode:

$insertPoll=mysql_query("INSERT INTO `poll` 
                     (`pollId`, `groupId`, `creatorUserId`, 
                      `createdDateTime`, `lastVoteDateTime`, `pollQuestion`, `pollOption`) 
               VALUES (NULL, '$groupId', '$userId', '$date', '0000-00-00 00:00:00', 
                      '$pollQuestion', '".utf8_encode($pollOptions)."')") or die(mysql_error());   

编辑:调查一下,错误不依赖于linux / windows,而是依赖于是否启用了严格模式。遗憾!

在任何情况下,使用正确的UTF-8都可以解决您的问题。