2010-07-01 21 views
37

Perché è sempre necessario specificare VARCHAR(length) anziché solo VARCHAR? È comunque dinamico.Perché VARCHAR ha bisogno di specificare la lunghezza?

UPD: Sono sconcertato in particolare dal fatto che è obbligatorio (ad esempio in MySQL).

+2

Possibile duplicato di http://stackoverflow.com/questions/2241238/why-does-oracle-varchar2-have-a-mandatory-size-as-a-definition-parameter/2244926#2244926 –

+0

Grazie, questo è davvero un duplicato – Fixpoint

risposta

10

Prima di tutto, non è necessario in tutti i database. Guarda su SQL Server, dove è facoltativo.

Indipendentemente da ciò, definisce una dimensione massima per il contenuto del campo. Non è una cosa negativa di per sé, e trasmette un significato (per esempio - numeri di telefono, dove non vuoi numeri internazionali nel campo).

+3

È vero, basta fare attenzione quando non si definisce la dimensione in SQL Server in quanto verrà impostato su valori diversi a seconda dello scenario, ad es. http://www.adathedev.co.uk/2010/04/sql-cast-to-varchar-without-size.html – AdaTheDev

+0

"Quando n non è specificato in una definizione di dati o in una dichiarazione di dichiarazione di variabili, la lunghezza predefinita è 1 Quando n non è specificato quando si usano le funzioni CAST e CONVERT, la lunghezza predefinita è 30. " dal link menzionato –

1

Da Wikipedia:

campi varchar possono essere di qualsiasi dimensione fino al limite. Il limite è diverso da tipi di database, Oracle 9i database ha un limite di 4000 byte, un database MySQL ha un limite di 65.535 byte (per l'intera riga) e Microsoft SQL Server 2005 8000 byte (a meno che non varchar (max) viene utilizzato, che ha una capacità di memoria massima di 2,147,483,648 byte).

24

La "lunghezza" del VARCHAR non è la lunghezza del contenuto, è la lunghezza massima del contenuto.

La lunghezza massima di un VARCHAR non è dinamica, è fissa e pertanto deve essere specificata.

Se non si desidera definire una dimensione massima, utilizzare VARCHAR (MAX).

+3

Perché VARCHAR per impostazione predefinita non significa VARCHAR (MAX)? INT ha dimensioni predefinite, quindi perché VARCHAR non ha dimensioni predefinite? Quali sono le ragioni alla base di questa decisione progettuale presa quando è stato creato lo standard SQL? – Fixpoint

+1

VARCHAR (MAX) non esisteva quando venivano creati gli standard di SQL Server. Era varchar (8000) o testo. –

+0

VARCHAR (MAX) viene gestito in modo diverso da VARCHAR (8000) (il più grande tipo non max) sotto il cofano. Si prega di utilizzare VARCHAR (MAX) solo quando ne avete davvero bisogno o la vostra prestazione ne risentirà. https://dba.stackexchange.com/questions/173895/understanding-varcharmax-8000-column-and-why-i-can-store-more-than-8000-charac – bobroxsox

3

Più il database conosce i dati che sta memorizzando, più ottimizzazioni è possibile effettuare durante la ricerca/aggiunta/aggiornamento dei dati con le richieste.

+4

Quali ottimizzazioni è possibile eseguire in base a varchar max lunghezza, per esempio? – Fixpoint

1

La risposta è non è necessario, è facoltativo.

È lì se si desidera assicurarsi che le stringhe non superino una certa lunghezza.

5

Si può vedere come un vincolo sui dati. Assicura che non archivi i dati che violano il tuo vincolo. È concepzionalmente simile ad es. un vincolo di controllo su una colonna intera che assicura che vengano inseriti solo i valori positivi.

2

C'è prestazioni possibili impact: in MySQL, temporary tables e MEMORY tables memorizzare una colonna VARCHAR come colonna di lunghezza fissa, imbottite tutta la sua lunghezza massima.

Se si progettano colonne VARCHAR molto più grandi delle dimensioni massime necessarie, si consumerà più memoria del necessario. Questo riguarda cache efficiency, sorting speed, ecc.

Così si dà la lunghezza massima che si trova sotto la stringa. come se tu avessi la lunghezza massima del personaggio 10, quindi non dare la sua lunghezza di 100 o più.

Problemi correlati