Tutto nasce dalla necessità di ottenere la lunghezza di una variabile stringa che includa gli spazi bianchi alla fine. In T-SQL esiste la celeberrima funzione LEN che restituisce appunto il numero di caratteri di una stringa escludendo però gli spazi bianchi alla fine. La funzione DATALENGTH restituisce invece il numero di bytes usati per rappresentare l'espressione passata come argomento. Tramite il seguente esempio ci rendiamo conto di come in realtà occorra dare grande attenzione al tipo di codifica che si intende utilizzare per la rappresentazione delle variabili stringa:
DECLARE @MyVAR nvarchar(4)
SET @MyVAR = 'abc '
-- UNICODE character data. (nvarchar)
SELECT LEN(@MyVAR) -- restituisce 3
SELECT DATALENGTH(@MyVAR) -- restituisce 8
SELECT DATALENGTH(@MyVAR)/2 -- restituisce 4
-- NON-UNICODE character data. (varchar)
SELECT LEN('abc ') -- restituisce 3
SELECT DATALENGTH('abc ') -- restituisce 4
SELECT DATALENGTH('abc ')/2 -- restituisce 2
Osserviamo come, di default, una stringa passata per valore venga in realtà parserizzata come un varchar e quindi come NON-Unicode (a meno dell'utilizzo del prefisso 'N' per stringhe costanti).... Banale ma non troppo direi!!!
Technorati tags: SQLServer, T-SQL