Qual è la differenza tra VARCHAR e CHAR in MySQL?
Sto cercando di memorizzare gli hash MD5.
Qual è la differenza tra VARCHAR e CHAR in MySQL?
Sto cercando di memorizzare gli hash MD5.
Risposte:
VARCHAR
è di lunghezza variabile.
CHAR
è a lunghezza fissa.
Se i tuoi contenuti hanno dimensioni fisse, otterrai prestazioni migliori con CHAR
.
Vedi la pagina MySQL sui tipi CHAR e VARCHAR per una spiegazione dettagliata (assicurati di leggere anche i commenti).
Values in VARCHAR columns are variable-length strings. The length can be specified as a value from 0 to 255 before MySQL 5.0.3, and 0 to 65,535 in 5.0.3 and later versions.
CHAR Vs VARCHAR
CHAR viene utilizzato per la variabile Dimensione lunghezza fissa
VARCHAR viene utilizzato per la variabile Dimensione lunghezza variabile.
Per esempio
Create table temp
(City CHAR(10),
Street VARCHAR(10));
Insert into temp
values('Pune','Oxford');
select length(city), length(street) from temp;
L'output sarà
length(City) Length(street)
10 6
Conclusione: per utilizzare lo spazio di archiviazione in modo efficiente è necessario utilizzare VARCHAR anziché CHAR se la lunghezza della variabile è variabile
Una CHAR(x)
colonna può contenere solo esattamente x
caratteri.
Una VARCHAR(x)
colonna può contenere fino a x
caratteri.
Poiché i tuoi hash MD5 avranno sempre le stesse dimensioni, probabilmente dovresti usare a CHAR
.
Tuttavia, non dovresti usare MD5 in primo luogo; ha conosciuto debolezze.
Utilizzare invece SHA2.
Se si utilizzano password di hashing, è necessario utilizzare bcrypt.
Qual è la differenza tra VARCHAR e CHAR in MySQL?
Alle risposte già fornite vorrei aggiungere che nei sistemi OLTP o nei sistemi con aggiornamenti frequenti prendere in considerazione l'utilizzo CHAR
anche per colonne di dimensioni variabili a causa della possibile VARCHAR
frammentazione delle colonne durante gli aggiornamenti.
Sto cercando di memorizzare gli hash MD5.
L'hash MD5 non è la scelta migliore se la sicurezza conta davvero. Tuttavia, se utilizzerai una funzione hash, considera invece il BINARY
tipo per essa (ad esempio, MD5 produrrà hash a 16 byte, quindi BINARY(16)
sarebbe sufficiente invece che CHAR(32)
per 32 caratteri che rappresentano cifre esadecimali. Ciò risparmierebbe più spazio e l'efficienza delle prestazioni.
Varchar interrompe gli spazi finali se i caratteri inseriti sono più corti della lunghezza dichiarata, mentre il carattere no. Char riempirà gli spazi e sarà sempre la lunghezza dichiarata. In termini di efficienza, varchar è più abile in quanto taglia i caratteri per consentire una maggiore regolazione. Tuttavia, se conosci la lunghezza esatta del carattere, il carattere verrà eseguito con un po 'più di velocità.
Nella maggior parte dei RDBMS oggi, sono sinonimi. Tuttavia, per quei sistemi che hanno ancora una distinzione, un campo CHAR viene memorizzato come colonna a larghezza fissa. Se lo definisci come CHAR (10), allora 10 caratteri vengono scritti nella tabella, dove "padding" (in genere spazi) viene utilizzato per riempire qualsiasi spazio che i dati non utilizzano. Ad esempio, il salvataggio di "bob" verrebbe salvato come ("bob" +7 spazi). Una colonna VARCHAR (carattere variabile) è pensata per archiviare i dati senza sprecare lo spazio extra che fa una colonna CHAR.
Come sempre, Wikipedia parla più forte.
CHAR è un campo a lunghezza fissa; VARCHAR è un campo di lunghezza variabile. Se stai memorizzando stringhe con una lunghezza variabile selvaggiamente come i nomi, usa un VARCHAR, se la lunghezza è sempre la stessa, usa un CHAR perché è leggermente più efficiente in termini di dimensioni e anche leggermente più veloce.
CHAR è a lunghezza fissa e VARCHAR è a lunghezza variabile. CHAR utilizza sempre la stessa quantità di spazio di archiviazione per voce, mentre VARCHAR utilizza solo la quantità necessaria per memorizzare il testo effettivo.
Il carattere è un tipo di dati di carattere a lunghezza fissa, varchar è un tipo di dati di carattere a lunghezza variabile.
Poiché char è un tipo di dati a lunghezza fissa, la dimensione di archiviazione del valore char è uguale alla dimensione massima per questa colonna. Poiché varchar è un tipo di dati a lunghezza variabile, la dimensione di archiviazione del valore varchar è la lunghezza effettiva dei dati immessi, non la dimensione massima per questa colonna.
È possibile utilizzare char quando si prevede che le voci di dati in una colonna abbiano le stesse dimensioni. È possibile utilizzare varchar quando si prevede che le voci di dati in una colonna abbiano dimensioni considerevoli.
secondo il libro MySQL ad alte prestazioni :
VARCHAR memorizza stringhe di caratteri a lunghezza variabile ed è il tipo di dati di stringa più comune. Può richiedere meno spazio di archiviazione rispetto ai tipi a lunghezza fissa, poiché utilizza solo lo spazio necessario (ovvero, per memorizzare valori più brevi viene utilizzato meno spazio). L'eccezione è una tabella MyISAM creata con ROW_FORMAT = FIXED, che utilizza una quantità fissa di spazio sul disco per ogni riga e può quindi sprecare spazio. VARCHAR aiuta le prestazioni perché consente di risparmiare spazio.
CHAR ha una lunghezza fissa: MySQL alloca sempre abbastanza spazio per il numero specificato di caratteri. Quando si memorizza un valore CHAR, MySQL rimuove tutti gli spazi finali. (Ciò valeva anche per VARCHAR in MySQL 4.1 e versioni precedenti: CHAR e VAR CHAR erano logicamente identici e differivano solo nel formato di archiviazione.) I valori sono riempiti con spazi come necessario per i confronti.
VARCHAR
deve allocare dinamicamente la memoria come e quando richiesto riducendo così le prestazioni rispetto a CHAR
, giusto?
Char
ha una lunghezza fissa (supporta 2000 caratteri), è l'acronimo di carattere è un tipo di dati
Varchar
ha una lunghezza variabile (supporta 4000 caratteri)
Char o varchar: viene utilizzato per inserire dati testuali in cui la lunghezza può essere indicata tra parentesi, ad es. Char (20)
(
e )
sono parentesi, non parentesi.
(
e )
parentesi, e molti inglesi probabilmente non si rendono nemmeno conto che ci sono dialetti dell'inglese in cui la parola "parentesi" può riferirsi a un segno di punteggiatura. C'è un caso forte da fare per preferire le "parentesi" alle "parentesi" - è probabilmente, a conti fatti, l'opzione massimamente chiara quando si prende di mira un pubblico internazionale di programmatori - ma è un caso più complicato delle "parentesi" che si sbagliano.