Varchar in MySQL è un tipo di dati utilizzato per archiviare testo la cui lunghezza può avere un massimo di 65535 caratteri . Le colonne varchar nella tabella sono of stringa di lunghezza variabile che può contenere numeri, caratteri o entrambi. Questo tipo di dati è in grado di memorizzare solo 255 caratteri prima della versione 5.0.3, ma con questa versione e successive può contenere fino a 65535 caratteri. Può essere archiviato in MySQL come file 1 byte o 2 byte prefisso di lunghezza più dimensione effettiva.
Il prefisso length specifica la lunghezza in byte di un valore stringa, non la dimensione massima che abbiamo impostato. Se i valori non richiedono più di 255 byte, una colonna utilizza il prefisso di lunghezza più un byte. Se i valori richiedono più di 255 byte, una colonna utilizza il prefisso di lunghezza più due byte.
La lunghezza massima di un VARCHAR in MySQL è soggetto alla dimensione massima della riga di 65.535 byte, che è condivisa tra tutte le colonne tranne le colonne TEXT/BLOB e il set di caratteri utilizzato. Ciò significa che la colonna totale non deve essere superiore a 65535 byte.
Cerchiamo di capirlo con l'aiuto di un esempio.
Creeremo due tabelle e le chiameremo Test1 e Test2. Entrambe le tabelle contengono due colonne denominate T1 e T2. Esegui la seguente istruzione per creare una tabella ' Prova 1 ':
CREATE TABLE Test1 ( T1 VARCHAR(32765) NOT NULL, T2 VARCHAR(32766) NOT NULL ) CHARACTER SET = 'latin1' COLLATE LATIN1_DANISH_CI;
L'istruzione precedente ha creato correttamente una tabella perché la lunghezza della colonna T1 = 32765 più 2 byte e T2 = 32766 più 2 byte pari a 65535 (32765+2+32766+2). Pertanto, la lunghezza della colonna soddisfa la dimensione massima della riga di varchar, ovvero 65535.
Ora vedremo cosa succede se la dimensione della colonna supera la dimensione massima di varchar 65535. Esegui l'istruzione seguente in cui abbiamo aumentato la dimensione della colonna T1 per creare una tabella Prova2 :
CREATE TABLE Test2 ( T1 VARCHAR(32770) NOT NULL, T2 VARCHAR(32766) NOT NULL ) CHARACTER SET = 'latin1' COLLATE LATIN1_DANISH_CI;
Dopo aver eseguito l'istruzione precedente, MySQL produce l'errore. Ciò significa che la dimensione massima della riga non può superare 65.535 byte. In ogni caso, se aumenta, l'istruzione fallisce e MySQL genererà un errore.
In un altro caso, supponiamo di aver creato una tabella denominata Prova3 utilizzando la seguente dichiarazione:
CREATE TABLE Test3 ( Id INT PRIMARY KEY AUTO_INCREMENT, Name VARCHAR(5) NOT NULL );
Successivamente, inserisci i valori nella tabella utilizzando la seguente istruzione:
INSERT INTO Test3(Name) VALUES ('Stephen');
Ora, esegui l'istruzione precedente. MySQL fornisce il messaggio di errore: I dati sono troppo lunghi per la colonna 'Nome' alla riga 1 . L'output lo spiega più chiaramente.
MySQL VARCHAR e spazi
MySQL non riempie lo spazio per i valori varchar quando vengono archiviati. MySQL conservava anche gli spazi finali quando memorizzavano o recuperavano valori varchar. Possiamo capirlo attraverso il seguente esempio dove an inserire la dichiarazione aggiunge valori in Nome colonna della tabella Prova3 :
INSERT INTO Test3(Name) VALUES ('John ');
Successivamente, esegui l'istruzione SELECT per recuperare i valori.
SELECT Id, Name, length(Name) FROM Test3;
Fornirà il seguente output in cui MySQL ha incluso lo spazio finale nel conteggio della lunghezza perché non aumenta la lunghezza della colonna.
Tuttavia, quando proviamo a inserire un valore varchar con spazi finali che superano la lunghezza della colonna, MySQL lo farà troncare gli spazi finali. Inoltre, MySQL emette a avvertimento . L'esempio seguente lo spiega più chiaramente:
INSERT INTO Test3(Name) VALUES ('Peter ');
L'istruzione precedente inserisce un valore la cui lunghezza è sei nella colonna del nome. Il valore è ancora inserito nella colonna, ma MySQL tronca lo spazio finale prima di aggiungere il valore. Possiamo verificare utilizzando la query seguente in cui possiamo vedere l'istruzione insert aggiunta con successo ma con un avviso che fornisce: Dati troncati per la colonna 'nome' alla riga 1 :
Differenza tra tipo di dati Char e Varchar
Di seguito sono riportati i tipi di dati char e varchar Carattere ASCII . Sono quasi uguali ma differiscono nella memorizzazione e nel recupero dei dati dal database. La tabella seguente riepiloga le differenze essenziali tra i tipi di dati char e varchar:
CAR | VARCHAR |
---|---|
Ha carattere. | Sta per carattere variabile. |
Memorizza i valori in lunghezza fissa che dichiariamo durante la creazione di una tabella. | Memorizza i valori in una stringa di lunghezza variabile con un prefisso di lunghezza di uno o due byte. |
Questo tipo di dati può essere riempito con spazio finale per mantenere la lunghezza specificata. | Questo tipo di dati non può essere riempito con alcun carattere, incluso lo spazio, quando vengono archiviati. |
Non può contenere più di 255 caratteri. | Può contenere fino a 65535 caratteri. |
Supporta l'allocazione di memoria statica. | Supporta l'allocazione dinamica della memoria. |