【问题标题】:Database query not returning full string数据库查询未返回完整字符串
【发布时间】:2016-02-12 16:27:33
【问题描述】:

我在数据库中保存了一个似乎正确存储在 SQL Server 中的 json 字符串,但是在尝试获取数据时它只返回 json 字符串的一部分。

我正在使用 PDO 和 json_encode 来保存数据。 存储的json字符串长度约为1000个字符,table字段允许长度为4096。

获取结果:

$sql = "SELECT TOP 1 * FROM MyTable WHERE id = :id ORDER BY id DESC;";

$params = array(
    ":id" => $id
);

$sth = $this->db->prepare($sql);
$sth->execute($params);
$result = $sth->fetch(PDO::FETCH_ASSOC);

保存结果:

$json = json_encode($_POST);

$sql = "INSERT INTO MyTable(data) VALUES (:data);";

$params = array(
    ":data" => $data
);

$stmt = $this->db->prepare($sql);
$stmt->execute($params);

存储在 SQL Server 中的示例 Json:

{  
    "checkbox_1":"on",
    "checkbox_2":"on",
    "checkbox_3":"on",
    "text_1":"my text",
    "images":[  
        13685
    ],
    "date":"11-11-2015"
}

返回的示例 Json:

{  
    "checkbox_1":"on",
    "checkbox_2":"on",
    "checkbox_3":"on",
    "text_1

更新

看来返回的字符串长度总是:255

这可能是 SQL Server 配置还是 PDO?

【问题讨论】:

  • 您确定字符串不超过数据库限制吗? echo strlen($json);
  • 表/字段的编码是什么?我认为这可能是一个编码问题,您计算的是字符还是字节。
  • @Steve 字符串长度为 894,数据库限制为 4096
  • @JakeB。表的排序规则是 SQL_Latin1_General_CP1_CI_AS。
  • 该字段是否使用VARCHAR作为其类型?

标签: php sql sql-server pdo


【解决方案1】:

原来我用来通过 PDO 连接到 SQL Server 的协议在从 varchar 列中提取时限制为 255 个字符。

解决方法是将列更改为 TEXT 或将其转换为 SQL 中的文本

SELECT CAST(my_column as TEXT)

ODBC query on MS SQL Server returning first 255 characters only in PHP PDO (FreeTDS)

【讨论】:

  • 很高兴你明白了。多么奇怪的设置。
  • @JakeB。是的,我知道,令人沮丧!无论如何感谢您的帮助
【解决方案2】:

编辑:看起来 OP 的问题是其他问题,但我将把它留给以后可能有类似问题的人,可以通过查看 TEXTSIZE 来解决。


看起来问题可能出在 SQL Server 中的 TEXTSIZE 变量上,它限制了通过 PHP 返回的文本的长度。

查看当前使用的值是什么

SELECT @@TEXTSIZE

并使用

将其更新为更高的值
SET TEXTSIZE 2147483647

其中数字是最大字符数(默认为/最大为上述值)。

这是TEXTSIZE 上的 MSDN 页面:https://msdn.microsoft.com/en-us/library/ms186238.aspx

【讨论】:

  • 已经设置为2147483647,大约相当于2gb。正在保存/检索的 json 字符串没有接近那个大小。它的字符串长度为 894,大小约为 1.04KB。我想这一定是它的存储方式。
猜你喜欢
  • 1970-01-01
  • 2014-04-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多