当我的MySQl数据类型为位(1)时,但是当使用php json_encode
打印时,将使用unicode写入? IIS工作正常,
但在我的专用服务器中,Apache主机将成为unicode。为什么?
你可以看到Mysql数据类型上的Locating
,Locating
是位,但是打印了\ u0001?为什么呢?
这是我的编码GET方法get-googlemarker.php
来获得此结果
<?php
mysql_connect("localhost", "root", "123456") or die("Could not connect");
mysql_select_db("db_gps") or die("Could not select database");
$parent_id = $_GET['mainid'];
$query = "SELECT *
FROM tbl_locate AS a
INNER JOIN
(
SELECT MainID, Max(DateTime) AS DateTime
FROM tbl_locate
GROUP BY MainID
) AS b
ON a.MainID = b.MainID
AND a.DateTime = b.DateTime
LEFT JOIN
(
SELECT b.PicData
, b.PicUploadedDateTime
, b.MainID
FROM (SELECT MainID,Max(PicUploadedDateTime) as PicUploadedDateTime
FROM tbl_picture
group by MainID
) l
JOIN tbl_picture b
ON b.MainID = l.MainID AND b.PicUploadedDateTime = l.PicUploadedDateTime
) AS c
ON a.MainID = c.MainID";
$rs = mysql_query($query);
$arr = array();
while($obj = mysql_fetch_object($rs)) {
$arr[] = $obj;
}
echo json_encode($arr);
?>
表示数据是正确的,但问题是当我使用下面的javascript我无法读取定位值,
我已经尝试了alert
记录,但是空白。我尝试使用type:string
,type:bit
,type:bytes
,type:int
进行定位,
但不起作用。无法在alert
Ext.define('GoogleMarkerModel', {
extend: 'Ext.data.Model',
fields: [
{name: 'ID', type: 'int'},
{name: 'Locating', type: 'int'},
{name: 'MainPower', type: 'int'},
{name: 'Acc', type: 'int'},
{name: 'PowerOff', type: 'int'},
{name: 'Alarm', type: 'int'},
{name: 'Speed', type: 'int'},
{name: 'Direction', type: 'int'},
{name: 'Latitude', type: 'float'},
{name: 'Longitude', type: 'float'},
{name: 'DateTime', type: 'datetime'},
{name: 'MainID', type: 'int'},
{name: 'IOState', type: 'int'},
{name: 'OilState', type: 'int'},
{name: 'PicUploadedDateTime', type: 'datetime'},
{name: 'PicData', type: 'str'}
]
});
答案 0 :(得分:1)
变量的呈现仍然是正确的。
自PHP 5.4起,您可以将选项JSON_UNESCAPED_UNICODE
与json_encode()
一起使用。
见http://php.net/manual/en/function.json-encode.php
我的猜测是你的IIS默认返回未转义的值。
在Javascript中,您通常会使用parseInt(\u0001)
或其他内容。
因为它是extjs,我不知道。
计划B:
A)将数据库列从位更改为整数。
B)在php中投射数据库值
while($obj = mysql_fetch_object($rs)) {
$obj->Locating = (int)$obj-Locating;
// or try with (string) if (int) fails
$arr[] = $obj;
}
C)在json输出中只是str_replace
:
$json = json_encode($arr);
$json = str_replace('"\u0001"', '"1"', $json);
$json = str_replace('"\u0000"', '"0"', $json);
答案 1 :(得分:0)
使用mysqlnd(本机驱动程序)进行php。如果您使用的是ubuntu:
sudo apt-get install php5-mysqlnd
sudo service apache2 restart
本机驱动程序适当地返回整数类型。
此方法仅适用于PDO(不是mysqli)。