2015-07-23 19 views
5

Setup

Sto utilizzando diverse tabelle di memoria per memorizzare i dati sul mio sito web. Si tratta di un host web locale sul mio mac e un server dev su Linux utilizzando libreria PHP mssql su PHP 5.5Perché SQL Server seleziona query truncate stringa varchar?

Una tabella semplificata assomiglia:

CacheID INT NOT NULL 
CacheData VARCHAR(MAX) 

tanto in tanto inserisco diversi valori di grandi dimensioni. Oltre 10.000 caratteri. L'inserto funziona bene. Una semplice query mi dice tutti i dati sono nel campo:

SELECT 
    CacheID, 
    LEN(CacheData) 
FROM Caches 

Problema

Tuttavia, quando ho effettivamente selezionare i dati della colonna cache è sempre troncato a 8192 caratteri causando problemi. Semplice selezione:

SELECT 
    CacheData 
FROM Caches 
WHERE CacheID = 10 

Ho controllato il limite di caratteri varchar (max). Ed è ben oltre 8192. 2^32 - 1

La domanda

motivi per cui si i dati troncato?

La domanda in un altro formato. In realtà mi sono imbattuto in questo agian e ho dimenticato questa soluzione. Mi ci è voluto un po 'per ricordare come ho dimenticato la causa principale. Ecco cosa ho cercato pensando che SQL Server era il colpevole.

Qual è la lunghezza massima di SQL Servers Varchar (MAX)? - Se i tuoi valori vengono troncati probabilmente è causato da php non sql server. Se si vuole solo sapere qual è il massimo è, la domanda si risponde qui: Maximum size of a varchar(max) variable

risposta

4

Disclosure

Rispondendo alla mia domanda. Inseriscilo qui perché mi ci è voluta più di un'ora per dare la caccia al problema e sarebbe stato carino avere una risposta molto precisa. ho visto simili domande su stack overflow ma erano molto specifici per un caso d'uso o così mal formulata non erano trovabili da risultati di ricerca

risposta modulo

mssql per PHP ha diverse impostazioni predefinite nel php file .ini. Una di queste impostazioni è mssql.textlimit e mssql.textsize. Queste impostazioni tronchiano qualsiasi campo basato sul testo (varchar, text, nvarchar) alla dimensione impostata.

Ho visto post in cui il troncato si trova su 8192 e 4096. Quindi presumo che uno di questi possa essere predefinito. Ho aumentato il mio a 65535 (2^16 - 1).

Altre questioni connesse

Come nota a margine Ho visto anche domanda simile appositamente per i risultati delle query in SQL Server Management Studio. Ci sono diverse limitazioni nel programma per quanti caratteri possono essere visualizzati o esportati. Inoltre ci sono impostazioni nel programma per modificare il numero di caratteri visualizzati/esportati. Maggiori informazioni su questo numero here.