logo

MySQL VARCHAR

Varchar v MySQL je dátový typ používaný na ukladanie textu, ktorého dĺžka môže mať max 65535 znakov . Stĺpce varchar v tabuľke sú z reťazec s premenlivou dĺžkou ktorý môže obsahovať číslice alebo znaky alebo oboje. Tento typ údajov je schopný uložiť len 255 znakov pred verziou 5.0.3, ale s touto verziou a novšou môže obsahovať až 65535 znakov. Môže byť uložený v MySQL ako a 1-bajtový alebo 2-bajtový predpona dĺžky plus skutočná veľkosť.

Predpona dĺžky určuje bajtovú dĺžku hodnoty reťazca, nie maximálnu veľkosť, ktorú sme nastavili. Ak hodnoty nevyžadujú viac ako 255 bajtov, stĺpec používa predponu dĺžky plus jeden bajt. Ak hodnoty vyžadujú viac ako 255 bajtov, stĺpec používa predponu dĺžky plus dva bajty.

Maximálna dĺžka VARCHAR in MySQL podlieha maximálnej veľkosti riadka 65 535 bajtov, ktorú zdieľajú všetky stĺpce okrem stĺpcov TEXT/BLOB a použitej znakovej sady. To znamená, že celkový stĺpec by nemal byť väčší ako 65535 bajtov.

stream filtra java

Poďme to pochopiť pomocou príkladu.

Vytvoríme dve tabuľky a pomenujeme ich Test1 a Test2. Obe tabuľky obsahujú dva stĺpce s názvom T1 a T2. Vykonajte nasledujúci príkaz na vytvorenie tabuľky ' Test 1 ':

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

Vyššie uvedený príkaz úspešne vytvoril tabuľku, pretože dĺžka stĺpca T1 = 32765 plus 2 bajty a T2 = 32766 plus 2 bajty sa rovná 65535 (32765+2+32766+2). Dĺžka stĺpca teda spĺňa maximálnu veľkosť riadku varchar, ktorá je 65535.

MySQL VARCHAR

Teraz uvidíme, čo sa stane, ak veľkosť stĺpca presahuje maximálna veľkosť varchar 65535. Vykonajte nižšie uvedený príkaz, kde sme zväčšili veľkosť stĺpca T1 na vytvorenie tabuľky Test2 :

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

Po vykonaní vyššie uvedeného príkazu MySQL vygeneruje chybu. To znamená, že maximálna veľkosť riadku nemôže presiahnuť 65 535 bajtov. V každom prípade, ak sa zvýši, príkaz zlyhal a MySQL vygeneruje chybu.

MySQL VARCHAR

V inom prípade predpokladajme, že sme vytvorili tabuľku s názvom Test3 pomocou nižšie uvedeného vyhlásenia:

reťazcové funkcie v jazyku Java
 CREATE TABLE Test3 ( Id INT PRIMARY KEY AUTO_INCREMENT, Name VARCHAR(5) NOT NULL ); 

Potom vložte hodnoty do tabuľky pomocou nasledujúceho príkazu:

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

Teraz vykonajte vyššie uvedené vyhlásenie. MySQL zobrazuje chybovú správu: Údaje sú príliš dlhé pre stĺpec „Názov“ v riadku 1 . Výstup to vysvetľuje jasnejšie.

MySQL VARCHAR

MySQL VARCHAR a priestory

MySQL nevypĺňa priestor pre hodnoty varchar, keď sú uložené. MySQL si tiež ponechalo koncové medzery, keď ukladalo alebo získavalo hodnoty varchar. Môžeme to pochopiť pomocou nasledujúceho príkladu, kde an vložiť vyhlásenie pridáva hodnoty v názov stĺpec tabuľky Test3 :

reťazec.podreťazec java
 INSERT INTO Test3(Name) VALUES ('John '); 

Potom vykonajte príkaz SELECT na získanie hodnôt.

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

Poskytne nasledujúci výstup, kde MySQL zahrnulo koncovú medzeru do počítania dĺžky, pretože nezvyšuje dĺžku stĺpca.

MySQL VARCHAR

Keď sa však pokúsime vložiť hodnotu varchar s medzerami na konci, ktoré presahujú dĺžku stĺpca, MySQL to urobí skrátiť koncové medzery. Tiež problémy s MySQL a POZOR . Nasledujúci príklad to vysvetľuje jasnejšie:

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

Vyššie uvedený príkaz vkladá hodnotu, ktorej dĺžka je šesť do stĺpca s názvom. Hodnota je stále vložená do stĺpca, ale MySQL pred pridaním hodnoty skráti koncovú medzeru. Môžeme to overiť pomocou nižšie uvedeného dotazu, kde vidíme, že príkaz na vloženie bol úspešne pridaný, ale s upozornením, ktoré dáva: Údaje v stĺpci „name“ v riadku 1 boli skrátené :

MySQL VARCHAR

Rozdiel medzi typom údajov Char a Varchar

Obidva typy údajov char a varchar sú nasledované ASCII znak . Sú takmer rovnaké, ale líšia sa ukladaním a získavaním údajov z databázy. Nasledujúca tabuľka sumarizuje základné rozdiely medzi typom údajov char a varchar:

CHAR VARCHAR
Má charakter. Znamená variabilný charakter.
Ukladá hodnoty v pevnej dĺžke, ktoré deklarujeme pri vytváraní tabuľky. Hodnoty ukladá do reťazca s premenlivou dĺžkou s jedno alebo dvojbajtovou predponou.
Tento typ údajov možno doplniť medzerou na konci, aby sa zachovala špecifikovaná dĺžka. Tento typ údajov nemožno pri ukladaní doplniť žiadnym znakom vrátane medzery.
Nemôže obsahovať viac ako 255 znakov. Pojme až 65535 znakov.
Podporuje prideľovanie statickej pamäte. Podporuje dynamické prideľovanie pamäte.