怎么来MySQL位数据类型php打印unicode?

时间:2013-08-01 20:24:37

标签: php javascript json extjs

当我的MySQl数据类型为位(1)时,但是当使用php json_encode打印时,将使用unicode写入? IIS工作正常,
 但在我的专用服务器中,Apache主机将成为unicode。为什么? enter image description here

你可以看到Mysql数据类型上的LocatingLocating是位,但是打印了\ 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:stringtype:bittype:bytestype: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'}
        ]
    });

2 个答案:

答案 0 :(得分:1)

变量的呈现仍然是正确的。

自PHP 5.4起,您可以将选项JSON_UNESCAPED_UNICODEjson_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)。