Perché la fusione di testo come varchar senza specificare una lunghezza troncare il testo a 30 caratteri?

StackOverflow https://stackoverflow.com/questions/777394

Domanda

ero alla ricerca di un database MS-SQL Server 2005 per assicurarsi che un certo campo di testo è sempre un multiplo di 8 di lunghezza. Quando ho fatto funzionare la seguente domanda, che ho avuto diverse file erano di lunghezza 30. Ma quando ho studiato quei dischi, ho scoperto che erano più a lungo.

select distinct len(cast(textfield as varchar)) from tablename

Tuttavia, se a specificare la lunghezza del varchar come qualcosa di più (come nel seguente query), funziona benissimo.

select distinct len(cast(textfield as varchar(1000))) from tablename

Qualcuno sa il motivo per cui il valore predefinito è 30 e se questa è un'impostazione configurabile?

Altri suggerimenti

Casting può accadere quando ci sono molte righe differenti che hanno bisogno di adattarsi quella colonna. Il motore di database, perché non è perfetto, non vuole andare alla difficoltà di controllare la lunghezza di tutte le possibili righe di una query potrebbe tornare per scoprire quanto tempo per impostare il massimo, in modo che non controlla le righe - ci vuole solo un valore predefinito di 30, che è un arbitrario occhio e croce in quanto non conosce meglio.

Probabilmente, si sarebbe potuto intelligente per loro di impostare il valore predefinito a qualcosa come 256, o qualsiasi altra cosa la lunghezza massima per VARCHAR è, ma credo che più di ogni altra cosa, è un utile promemoria che in realtà non so quanto tempo si vuole che a meno che non gli si dice.

Si tratta di un numero arbitrario, e per quanto ne so non è configurabile. Non riesco a pensare ad un caso in cui non si vorrebbe per specificare la lunghezza.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top