Я использую несколько таблиц памяти для кэширования данных для моего сайта. Это локальный веб-хостинг на моем 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)
Отвечая на мой собственный вопрос. Просто разместив его здесь, потому что мне понадобилось больше часа, чтобы выследить этот вопрос, и было бы неплохо получить прямой ответ на него.
Я видел похожие вопросы о переполнении стека, но они были очень специфичны для варианта использования или плохо сформулированы, их нельзя было найти по результатам поиска
Модуль mssql для php имеет несколько настроек по умолчанию в файле php.ini. Одна из этих настроек mssql.textlimit
а также mssql.textsize
, Эти настройки усекают любое текстовое поле (varchar, text, nvarchar) до размера, который они также задают.
Я видел сообщения, где усечение находится на 8192 и 4096. Поэтому я предполагаю, что любой из них может быть по умолчанию. Я поднял свой до 65535 (2 ^ 16 — 1).
В качестве примечания я также видел подобный вопрос специально для результатов запроса в SQL Server Management Studio. В программе есть несколько ограничений на количество отображаемых или экспортируемых символов. Также в программе есть настройки для редактирования количества отображаемых / экспортируемых символов. Больше информации по этому вопросу Вот.
Других решений пока нет …