2015-11-11 2 views
1

Я сохраняю строку json в базе данных, которая, как представляется, хранится правильно в SQL Server, однако при попытке получить данные она возвращает часть json-строки.Запрос базы данных, не возвращающий полную строку

Я использую PDO и json_encode для сохранения данных. строка JSON хранится длиной около 1000 символов, а поле таблица позволяет длину 4096.

Fetching результат:

$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); 

Пример Json, хранящийся в SQL Server:

{ 
    "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 

Update

Оказывается, что длина строки, возвращаемой всегда:

Может ли это быть SQL Конфигурация сервера или, возможно, PDO?

+1

Вы уверены, что строка разве длиннее, чем предел базы данных?'echo strlen ($ json);' – Steve

+0

Что такое кодировка в таблице/поле? Я думаю, что это может быть проблема с кодировкой, в которой вы считаете символы в сравнении с байтами. –

+0

@ Настроить длину строки 894, ограничение базы данных - 4096 – iswinky

ответ

1

Оказывается, что протокол я использовал для подключения к SQL Server с помощью ограничений PDO до 255 символов при извлечении из столбца VARCHAR.

Для устранения этой проблемы либо изменить столбец TEXT или бросить его в текст в SQL

SELECT CAST(my_column as TEXT) 

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

+0

Рад, что вы поняли это. Какая странная настройка. –

+0

@JakeB. Да, я знаю, разочарование! Все равно, спасибо за помощь – iswinky

0

Редактировать: Похоже, вопрос OP было что-то еще, но я оставлю это ниже для будущих людей, которые могли бы иметь подобный вопрос, который можно решить, глядя на TEXTSIZE.


Похоже, этот вопрос может быть с TEXTSIZE переменными в SQL Server, который ограничивает длину возвращаемого текста с помощью PHP.

Посмотрите, что текущее значение с помощью

SELECT @@TEXTSIZE 

и обновлять его на более высокое значение, используя

SET TEXTSIZE 2147483647 

В случае, если число является максимальным количеством символов (по умолчанию/исчерпано на указанном стоимость).

Вот страница MSDN на TEXTSIZE: https://msdn.microsoft.com/en-us/library/ms186238.aspx

+1

Уже установлено значение 2147483647, что эквивалентно примерно 2gb. Строки json, которые сохраняются/извлекаются, не находятся рядом с этим размером. Он имеет длину строки 894, а размер составляет примерно 1,04 КБ. Я думаю, что это должно быть так, как оно хранится. – iswinky

Смежные вопросы