Varchar i MySQL er en datatype, der bruges til lagring af tekst, hvis længde maksimalt kan have 65535 tegn . Varchar-kolonnerne i tabellen er af streng med variabel længde der kan indeholde enten numerisk eller tegn eller begge dele. Denne datatype er i stand til kun at gemme 255 tegn før version 5.0.3, men med denne version og nyere kan den indeholde op til 65535 tegn. Det kan gemmes i MySQL som en 1-byte eller 2-byte længdepræfiks plus faktisk størrelse.
Længdepræfikset angiver byte-længden af en strengværdi, ikke den maksimale størrelse, som vi har angivet. Hvis værdier ikke kræver mere end 255 bytes, bruger en kolonne længdepræfiks plus én byte. Hvis værdier kræver mere end 255 bytes, bruger en kolonne længdepræfiks plus to bytes.
Den maksimale længde af en VARCHAR in MySQL er underlagt den maksimale rækkestørrelse på 65.535 bytes, som deles mellem alle kolonner undtagen TEXT/BLOB-kolonner og det anvendte tegnsæt. Det betyder, at den samlede kolonne ikke bør være mere end 65535 bytes.
Lad os forstå det ved hjælp af et eksempel.
Vi skal lave to tabeller og navngive det Test1 og Test2. Begge tabeller indeholder to kolonner med navnet T1 og T2. Udfør følgende sætning for at oprette en tabel ' Test 1 ':
CREATE TABLE Test1 ( T1 VARCHAR(32765) NOT NULL, T2 VARCHAR(32766) NOT NULL ) CHARACTER SET = 'latin1' COLLATE LATIN1_DANISH_CI;
Ovenstående sætning oprettede en tabel med succes, fordi kolonnelængden T1 = 32765 plus 2 bytes og T2 = 32766 plus 2 bytes lig med 65535 (32765+2+32766+2). Så kolonnelængden opfylder den maksimale rækkestørrelse for varchar, som er 65535.
Nu skal vi se, hvad der sker, hvis kolonnestørrelsen overstiger den maksimale størrelse af varchar 65535. Udfør nedenstående sætning, hvor vi har øget størrelsen af kolonne T1 for at oprette en tabel Test 2 :
CREATE TABLE Test2 ( T1 VARCHAR(32770) NOT NULL, T2 VARCHAR(32766) NOT NULL ) CHARACTER SET = 'latin1' COLLATE LATIN1_DANISH_CI;
Efter at have udført ovenstående sætning, producerer MySQL fejlen. Det betyder, at den maksimale rækkestørrelse ikke må overstige 65.535 bytes. Under alle omstændigheder, hvis den stiger, mislykkedes sætningen, og MySQL vil generere en fejl.
I et andet tilfælde, antag, at vi har oprettet en tabel med navnet Test 3 ved hjælp af nedenstående udsagn:
CREATE TABLE Test3 ( Id INT PRIMARY KEY AUTO_INCREMENT, Name VARCHAR(5) NOT NULL );
Indsæt derefter værdier i tabellen ved hjælp af nedenstående sætning:
INSERT INTO Test3(Name) VALUES ('Stephen');
Udfør nu ovenstående erklæring. MySQL giver fejlmeddelelsen: Data er for lange til kolonne 'Navn' i række 1 . Outputtet forklarer det mere tydeligt.
MySQL VARCHAR og Spaces
MySQL har ikke polstret plads til varchar-værdier, når de er gemt. MySQL beholdt også de efterfølgende mellemrum, når de lagrede eller hentede varchar-værdier. Vi kan forstå det gennem følgende eksempel, hvor en indsæt erklæring tilføjer værdier i Navn kolonne i tabellen Test 3 :
INSERT INTO Test3(Name) VALUES ('John ');
Udfør derefter SELECT-sætningen for at hente værdierne.
SELECT Id, Name, length(Name) FROM Test3;
Det vil give følgende output, hvor MySQL inkluderede det efterfølgende rum i optællingen af længden, fordi det ikke øger kolonnelængden.
Men når vi forsøger at indsætte en varchar-værdi med efterfølgende mellemrum, der overskred kolonnelængden, vil MySQL afkorte de efterfølgende rum. MySQL udsteder også en advarsel . Følgende eksempel forklarer det mere tydeligt:
INSERT INTO Test3(Name) VALUES ('Peter ');
Ovenstående sætning indsætter en værdi, hvis længde er seks ind i navnekolonnen. Værdien er stadig indsat i kolonnen, men MySQL afkorter det efterfølgende mellemrum, før værdien tilføjes. Vi kan verificere ved at bruge nedenstående forespørgsel, hvor vi kan se insert-sætningen tilføjet med succes, men med en advarsel, der giver: Data afkortet for kolonne 'navn' i række 1 :
Forskel mellem Char og Varchar Data Type
Både char- og varchar-datatyperne følger ASCII-tegn . De er næsten ens, men adskiller sig i lagring og hentning af data fra databasen. Følgende tabel opsummerer de væsentlige forskelle mellem char og varchar datatype:
CHAR | VARCHAR |
---|---|
Det står af karakter. | Det står for variabel karakter. |
Den gemmer værdierne i fast længde, som vi erklærer, mens vi opretter en tabel. | Den gemmer værdierne i en streng med variabel længde med en eller to-byte længde præfiks. |
Denne datatype kan polstres med bagerste plads for at beholde den angivne længde. | Denne datatype kan ikke udfyldes med tegn, inklusive mellemrum, når de er gemt. |
Den kan ikke indeholde mere end 255 tegn. | Den kan indeholde op til 65535 tegn. |
Det understøtter statisk hukommelsesallokering. | Det understøtter dynamisk hukommelsesallokering. |