logo

MySQL VARCHAR

Varchar i MySQL är en datatyp som används för att lagra text vars längd kan ha maximalt 65535 tecken . Varchar-kolumnerna i tabellen är av sträng med variabel längd som kan innehålla antingen numeriska eller tecken eller båda. Den här datatypen kan endast lagra 255 tecken före version 5.0.3, men med den här versionen och senare kan den innehålla upp till 65535 tecken. Det kan lagras i MySQL som en 1-byte eller 2-byte längdprefix plus verklig storlek.

Längdprefixet anger bytelängden för ett strängvärde, inte den maximala storleken som vi har angett. Om värden inte kräver mer än 255 byte, använder en kolumn längdprefix plus en byte. Om värden kräver mer än 255 byte, använder en kolumn längdprefix plus två byte.

Den maximala längden för en VARCHAR in MySQL är föremål för den maximala radstorleken på 65 535 byte, som delas mellan alla kolumner utom TEXT/BLOB-kolumner och teckenuppsättningen som används. Det betyder att den totala kolumnen inte bör vara mer än 65535 byte.

Låt oss förstå det med hjälp av ett exempel.

bord i latex

Vi ska skapa två tabeller och döpa det till Test1 och Test2. Båda tabellerna innehåller två kolumner som heter T1 och T2. Utför följande sats för att skapa en tabell ' Test 1 ':

binärt träd vs binärt sökträd
 CREATE TABLE Test1 ( T1 VARCHAR(32765) NOT NULL, T2 VARCHAR(32766) NOT NULL ) CHARACTER SET = 'latin1' COLLATE LATIN1_DANISH_CI; 

Ovanstående sats skapade en tabell framgångsrikt eftersom kolumnlängden T1 = 32765 plus 2 byte och T2 = 32766 plus 2 byte lika med 65535 (32765+2+32766+2). Så kolumnlängden uppfyller den maximala radstorleken för varchar, vilket är 65535.

MySQL VARCHAR

Nu ska vi se vad som händer om kolumnstorleken överstiger den maximala storleken på varchar 65535. Kör satsen nedan där vi ökar storleken på kolumn T1 för att skapa en tabell Test 2 :

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

Efter att ha kört ovanstående sats, producerar MySQL felet. Det betyder att den maximala radstorleken inte får överstiga 65 535 byte. I alla fall, om det ökar, misslyckades uttalandet och MySQL kommer att generera ett fel.

MySQL VARCHAR

I ett annat fall, anta att vi har skapat en tabell med namnet Test 3 med hjälp av följande uttalande:

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

Infoga sedan värden i tabellen med hjälp av följande uttalande:

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

Kör nu ovanstående uttalande. MySQL ger felmeddelandet: Data är för lång för kolumn 'Namn' på rad 1 . Utgången förklarar det tydligare.

MySQL VARCHAR

MySQL VARCHAR och Spaces

MySQL har inget vadderat utrymme för varchar-värden när de lagras. MySQL behöll också de efterföljande utrymmena när de lagrade eller hämtade varchar-värden. Vi kan förstå det genom följande exempel där en infoga uttalande lägger till värden i namn kolumn i tabellen Test 3 :

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

Kör sedan SELECT-satsen för att hämta värdena.

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

Det kommer att ge följande utdata där MySQL inkluderade det efterföljande utrymmet i räkningen av längd eftersom det inte ökar kolumnlängden.

MySQL VARCHAR

Men när vi försöker infoga ett varchar-värde med efterföljande mellanslag som överskrider kolumnlängden, kommer MySQL stympa de efterföljande utrymmena. MySQL utfärdar också en varning . Följande exempel förklarar det tydligare:

länkad lista java
 INSERT INTO Test3(Name) VALUES ('Peter '); 

Ovanstående påstående infogar ett värde vars längd är sex i namnkolumnen. Värdet är fortfarande infogat i kolumnen, men MySQL trunkerar det efterföljande utrymmet innan värdet läggs till. Vi kan verifiera med hjälp av nedanstående fråga där vi kan se insertsatsen tillagd framgångsrikt men med en varning som ger: Data trunkerade för kolumn 'namn' på rad 1 :

MySQL VARCHAR

Skillnaden mellan Char och Varchar Data Type

Både char- och varchar-datatyperna följer ASCII-tecken . De är nästan likadana men skiljer sig åt när det gäller att lagra och hämta data från databasen. Följande tabell sammanfattar de väsentliga skillnaderna mellan röding och varchar-datatyp:

RÖDING VARCHAR
Det står av karaktär. Det står för variabel karaktär.
Den lagrar värdena i fast längd som vi deklarerar när vi skapar en tabell. Den lagrar värdena i en sträng med variabel längd med en eller två byte längd prefix.
Denna datatyp kan fyllas med efterföljande utrymme för att behålla den angivna längden. Den här datatypen kan inte fyllas med något tecken, inklusive mellanslag, när de lagras.
Den kan inte innehålla mer än 255 tecken. Den kan innehålla upp till 65535 tecken.
Den stöder statisk minnesallokering. Den stöder dynamisk minnesallokering.