2015-07-23 11 views
5

Konfiguracja

Używam kilku tabel pamięci do przechowywania danych w pamięci podręcznej dla mojej witryny. Jest to lokalny hostingowego na moim Macu i serwer dev na Linux przy użyciu biblioteki php mssql na PHP 5.5Dlaczego SQL Server wybrać zapytanie obcięcie łańcucha Varchar?

Uproszczona tabela wygląda następująco:

CacheID INT NOT NULL 
CacheData VARCHAR(MAX) 

ja czasami wstawić kilka dużych wartości. Ponad 10 000 znaków. Wkładka działa dobrze. Proste zapytanie mówi mi wszystkie dane w polu:

SELECT 
    CacheID, 
    LEN(CacheData) 
FROM Caches 

Problem

Jednak, kiedy rzeczywiście wybrać dane kolumna cache zawsze obcinane do 8192 znaków powoduje problemy. Prosty wybór:

SELECT 
    CacheData 
FROM Caches 
WHERE CacheID = 10 

Sprawdziłem limit znaków varchar (max). I to jest dobrze poza 8192. 2^32 - 1

Kwestia

Dlaczego dane są obcinane?

Pytanie w innej formie. Właściwie to spotkałem się z tym agianem i zapomniałem o tym rozwiązaniu. Trochę mnie to przypominało, bo zapomniałem o podstawowej przyczynie. Oto, co szukałem myśląc, że SQL Server był winowajcą.

Co to jest maksymalna długość serwera SQL Server Varchar (MAX)? - Jeśli twoje wartości są obcięte prawdopodobnie spowodowane przez serwer php non sql. Jeśli po prostu chcesz wiedzieć, co max to, że pytanie jest tutaj: Maximum size of a varchar(max) variable

Odpowiedz

4

Ujawnienie

Odpowiadając na moje własne pytanie. Po prostu opublikowałem to tutaj, ponieważ zajęło mi to ponad godzinę, aby uporać się z tą kwestią i byłoby miło mieć na to odpowiedź. Widziałem podobne pytania na przepełnienie stosu, ale były one bardzo specyficzne dla przypadku użycia albo tak źle sformułowane, że nie były findable przez wyników wyszukiwania

odpowiedzi moduł

mssql dla PHP ma kilka ustawień domyślnych w php plik .ini. Jednym z tych ustawień jest mssql.textlimit i mssql.textsize. Te ustawienia skracają dowolne pole tekstowe (varchar, text, nvarchar) do rozmiaru, w którym są ustawione.

Widziałem posty, w których skrócone jest na 8192 i 4096. Zakładam więc, że którykolwiek z nich może być domyślny. Podniosłem kopalnię do 65535 (2^16 - 1).

Inne pokrewne zagadnienia

marginesie widziałem też podobne pytanie specjalnie dla wyników zapytania w SQL Server Management Studio. Program ma kilka ograniczeń dotyczących liczby znaków, które można wyświetlić lub wyeksportować. Istnieją również ustawienia w programie do edycji liczby wyświetlanych/eksportowanych znaków. Więcej informacji na ten temat: here.

Powiązane problemy