我有以下查询:
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;
}
答案 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都可以解决您的问题。