Почему SQL Server выбирает запрос обрезать строку varchar?

Я использую несколько таблиц памяти для кэширования данных для моего сайта. Это локальный веб-хостинг на моем mac и dev-сервер на linux с использованием библиотеки mssql php на php 5.5

Упрощенная таблица выглядит так:

CacheID INT NOT NULL
CacheData VARCHAR(MAX)

Я иногда вставляю несколько больших значений. Более 10000 символов Вставка работает отлично. Простой запрос говорит мне, что все данные находятся в поле:

SELECT
CacheID,
LEN(CacheData)
FROM Caches

Однако, когда я на самом деле выбираю данные, cache Столбец всегда усекается до 8192 символов, что вызывает проблемы. Простой выбор:

SELECT
CacheData
FROM Caches
WHERE CacheID = 10

Я проверил предел символов varchar (max). И это далеко за 8192. 2^32 - 1

Почему данные усекаются?

Вопрос в другой форме. Я действительно столкнулся с этим agian и забыл об этом решении. Мне понадобилось немного вспомнить, потому что я забыл основную причину. Вот что я искал, думая, что SQL Server был виновником.

Какова максимальная длина SQL Server Varchar (MAX)? — Если ваши значения усекаются, это, вероятно, вызвано php non sql server. Если вы просто хотите узнать, что такое максимум, ответ на этот вопрос здесь: Максимальный размер переменной varchar (max)

6

Решение

Отвечая на мой собственный вопрос. Просто разместив его здесь, потому что мне понадобилось больше часа, чтобы выследить этот вопрос, и было бы неплохо получить прямой ответ на него.
Я видел похожие вопросы о переполнении стека, но они были очень специфичны для варианта использования или плохо сформулированы, их нельзя было найти по результатам поиска

Модуль mssql для php имеет несколько настроек по умолчанию в файле php.ini. Одна из этих настроек mssql.textlimit а также mssql.textsize, Эти настройки усекают любое текстовое поле (varchar, text, nvarchar) до размера, который они также задают.

Я видел сообщения, где усечение находится на 8192 и 4096. Поэтому я предполагаю, что любой из них может быть по умолчанию. Я поднял свой до 65535 (2 ^ 16 — 1).

В качестве примечания я также видел подобный вопрос специально для результатов запроса в SQL Server Management Studio. В программе есть несколько ограничений на количество отображаемых или экспортируемых символов. Также в программе есть настройки для редактирования количества отображаемых / экспортируемых символов. Больше информации по этому вопросу Вот.

6

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]