Domanda

Vedo che VARCHAR (255) viene usato continuamente anziché VARCHAR (256), ma vedo anche VARCHAR (16) utilizzato invece di VARCHAR (15). Questo mi sembra incoerente. Se viene utilizzato un byte aggiuntivo per memorizzare la lunghezza del VARCHAR, questa regola non dovrebbe valere anche per le lunghezze minori come 2, 4, 8 per essere 1, 3, 7, invece?

O mi manca qualcosa?

In altre parole, se ho un numero che so non sarà mai superiore a 12, dovrei semplicemente andare avanti e usare invece un VARCHAR (15) o VARCHAR (16)? Perché utilizza la stessa quantità di spazio di un VARCHAR (12)? In tal caso, quale devo usare? 15 o 16? Questa regola cambia quando mi avvicino a 256?

Uso MySQL e SQL, a seconda del progetto.

È stato utile?

Soluzione

  

In altre parole, se ho un numero che so che non sarà mai superiore a 12, dovrei semplicemente andare avanti e usare invece un VARCHAR (15) o VARCHAR (16)?

No! Usa varchar (12) (o forse anche char (12) se la lunghezza è abbastanza costante).

C'era una volta il tipo varchar era limitato a 255 caratteri su alcuni sistemi ( incluso MySql precedente alla 5.0.3 ) perché il primo byte memorizzato indicava la lunghezza del campo. Data questa restrizione, gli sviluppatori che desiderano consentire una ragionevole quantità di testo sceglierebbero 255 anziché scegliere un tipo di dati completamente diverso.

Ma se conosci la dimensione dei tuoi dati, usa sicuramente quella dimensione per il database.

Altri suggerimenti

Non ha nulla a che fare con numeri pari o dispari.

Storicamente, 255 caratteri sono stati spesso la lunghezza massima di un VARCHAR in vari DBMS. Il limite di lunghezza per un campo che non era un LOB (Large Object) all'epoca era di 255 byte (1 byte int). Quindi il primo byte è stato usato per memorizzare la lunghezza del campo (0-255) e i rimanenti byte n per i caratteri. Ecco perché spesso vedi VARCHAR (255) .

Se il campo non sarà mai maggiore di 12, utilizzare VARCHAR (12) .

Penso che il problema originale sia che per alcuni sistemi VARCHAR (...) era limitato a 255, perché quando si utilizza un byte per codificare la lunghezza effettiva, è possibile esprimere solo lunghezze fino a 255.

VARCHAR (16) / VARCHAR (15) molto probabilmente ricorda queste origini, ma non c'è nulla di speciale nei due valori.

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