logo

MySQL VARCHAR

Varchar in MySQL is een gegevenstype dat wordt gebruikt voor het opslaan van tekst waarvan de lengte maximaal kan zijn 65535 tekens . De varchar-kolommen in de tabel zijn van string met variabele lengte die numeriek of teken of beide kan bevatten. Dit gegevenstype kon vóór versie 5.0.3 slechts 255 tekens opslaan, maar met deze versie en later kan het maximaal 65535 tekens bevatten. Het kan in MySQL worden opgeslagen als een 1 byte of 2 byte lengtevoorvoegsel plus werkelijke grootte.

Het lengtevoorvoegsel specificeert de bytelengte van een tekenreekswaarde, niet de maximale grootte die we hebben ingesteld. Als waarden niet meer dan 255 bytes vereisen, gebruikt een kolom het lengtevoorvoegsel plus één byte. Als waarden meer dan 255 bytes vereisen, gebruikt een kolom het lengtevoorvoegsel plus twee bytes.

De maximale lengte van een VARCHAR in MySQL is onderworpen aan de maximale rijgrootte van 65.535 bytes, die wordt gedeeld door alle kolommen behalve TEXT/BLOB-kolommen en de gebruikte tekenset. Dit betekent dat de totale kolom niet groter mag zijn dan 65535 bytes.

Laten we het begrijpen met behulp van een voorbeeld.

scanner-java importeren

We gaan twee tabellen maken en deze Test1 en Test2 noemen. Beide tabellen bevatten twee kolommen met de namen T1 en T2. Voer de volgende instructie uit om een ​​tabel te maken ' Proef 1 ':

vos versus wolf
 CREATE TABLE Test1 ( T1 VARCHAR(32765) NOT NULL, T2 VARCHAR(32766) NOT NULL ) CHARACTER SET = 'latin1' COLLATE LATIN1_DANISH_CI; 

De bovenstaande instructie heeft met succes een tabel gemaakt omdat de kolomlengte T1 = 32765 plus 2 bytes en T2 = 32766 plus 2 bytes gelijk is aan 65535 (32765+2+32766+2). De kolomlengte voldoet dus aan de maximale rijgrootte van varchar, namelijk 65535.

MySQL VARCHAR

Nu gaan we kijken wat er gebeurt als de kolomgrootte overtreft de maximale grootte van varchar 65535. Voer de onderstaande instructie uit waarbij we de grootte van kolom T1 hebben vergroot om een ​​tabel te maken Test2 :

 CREATE TABLE Test2 ( T1 VARCHAR(32770) NOT NULL, T2 VARCHAR(32766) NOT NULL ) CHARACTER SET = 'latin1' COLLATE LATIN1_DANISH_CI; 

Na het uitvoeren van de bovenstaande instructie produceert MySQL de fout. Dit betekent dat de maximale rijgrootte niet groter mag zijn dan 65.535 bytes. Hoe dan ook, als deze toeneemt, mislukt de instructie en genereert MySQL een fout.

MySQL VARCHAR

Stel in een ander geval dat we een tabel hebben gemaakt met de naam Test3 met behulp van de onderstaande verklaring:

postordertraject
 CREATE TABLE Test3 ( Id INT PRIMARY KEY AUTO_INCREMENT, Name VARCHAR(5) NOT NULL ); 

Voeg vervolgens waarden in de tabel in met behulp van de onderstaande verklaring:

 INSERT INTO Test3(Name) VALUES ('Stephen'); 

Voer nu de bovenstaande instructie uit. MySQL geeft de foutmelding: Gegevens zijn te lang voor kolom 'Naam' in rij 1 . De output legt het duidelijker uit.

MySQL VARCHAR

MySQL VARCHAR en spaties

MySQL vult geen ruimte in voor varchar-waarden wanneer deze worden opgeslagen. MySQL behield ook de volgspaties toen ze varchar-waarden opsloegen of ophaalden. We kunnen het begrijpen aan de hand van het volgende voorbeeld waarbij an verklaring invoegen voegt waarden toe aan de Naam kolom van tafel Test3 :

 INSERT INTO Test3(Name) VALUES ('John '); 

Voer vervolgens de SELECT-instructie uit om de waarden op te halen.

 SELECT Id, Name, length(Name) FROM Test3; 

Het geeft de volgende uitvoer waarbij MySQL de volgspatie heeft opgenomen in het tellen van de lengte, omdat de kolomlengte hierdoor niet wordt vergroot.

MySQL VARCHAR

Wanneer we echter proberen een varchar-waarde in te voegen met volgspaties die de kolomlengte overschrijden, zal de MySQL dat doen afkappen de achterliggende ruimtes. MySQL geeft ook een waarschuwing . Het volgende voorbeeld legt het duidelijker uit:

probeer vangen in java
 INSERT INTO Test3(Name) VALUES ('Peter '); 

De bovenstaande instructie voegt een waarde in waarvan de lengte is zes in de naamkolom. De waarde wordt nog steeds in de kolom ingevoegd, maar MySQL kapt de volgspatie af voordat de waarde wordt toegevoegd. We kunnen dit verifiëren met behulp van de onderstaande query, waarbij we kunnen zien dat de insert-instructie met succes is toegevoegd, maar met een waarschuwing die geeft: Gegevens afgekapt voor kolom 'naam' in rij 1 :

MySQL VARCHAR

Verschil tussen Char- en Varchar-gegevenstype

De gegevenstypen char en varchar zijn beide gevolgd ASCII-teken . Ze zijn vrijwel hetzelfde, maar verschillen in het opslaan en ophalen van de gegevens uit de database. De volgende tabel vat de essentiële verschillen tussen het gegevenstype char en varchar samen:

KAAR VARCHAR
Het heeft karakter. Het staat voor variabel karakter.
Het slaat de waarden op in een vaste lengte die we declareren tijdens het maken van een tabel. Het slaat de waarden op in een tekenreeks met variabele lengte met een voorvoegsel van één of twee bytes.
Dit gegevenstype kan worden opgevuld met een volgspatie om de opgegeven lengte te behouden. Dit gegevenstype kan niet worden opgevuld met enig teken, inclusief spatie, wanneer ze worden opgeslagen.
Het kan niet meer dan 255 tekens bevatten. Het kan maximaal 65535 tekens bevatten.
Het ondersteunt statische geheugentoewijzing. Het ondersteunt dynamische geheugentoewijzing.