Varchar v MySQL je podatkovni tip, ki se uporablja za shranjevanje besedila, katerega dolžina je lahko največ 65535 znakov . Stolpci varchar v tabeli so od niz spremenljive dolžine ki lahko vsebuje številko ali znak ali oboje. Ta vrsta podatkov lahko shrani samo 255 znakov pred različico 5.0.3, vendar s to različico in novejšimi lahko vsebuje do 65535 znakov. Lahko se shrani v MySQL kot 1-bajtni ali 2-bajtni predpona dolžine plus dejanska velikost.
Predpona dolžine določa dolžino v bajtu vrednosti niza in ne največje velikosti, ki smo jo nastavili. Če vrednosti ne zahtevajo več kot 255 bajtov, stolpec uporablja predpono dolžine in en bajt. Če vrednosti zahtevajo več kot 255 bajtov, stolpec uporablja predpono dolžine in dva bajta.
Največja dolžina VARCHAR v MySQL je predmet največje velikosti vrstice 65.535 bajtov, ki je v skupni rabi za vse stolpce razen stolpcev TEXT/BLOB in uporabljenega nabora znakov. To pomeni, da skupni stolpec ne sme biti večji od 65535 bajtov.
Naj to razumemo s pomočjo primera.
Ustvarili bomo dve tabeli in ju poimenovali Test1 in Test2. Obe tabeli vsebujeta dva stolpca z imenom T1 in T2. Izvedite naslednji stavek, da ustvarite tabelo ' Test 1 ':
CREATE TABLE Test1 ( T1 VARCHAR(32765) NOT NULL, T2 VARCHAR(32766) NOT NULL ) CHARACTER SET = 'latin1' COLLATE LATIN1_DANISH_CI;
Zgornji stavek je uspešno ustvaril tabelo, ker je dolžina stolpca T1 = 32765 plus 2 bajta in T2 = 32766 plus 2 bajta enaka 65535 (32765+2+32766+2). Torej dolžina stolpca ustreza največji velikosti vrstice varchar, ki je 65535.
pretvorba niza v int v javi
Zdaj pa bomo videli, kaj se zgodi, če je velikost stolpca presega največja velikost varchar 65535. Izvedite spodnji stavek, kjer smo povečali velikost stolpca T1, da ustvarimo tabelo Test2 :
CREATE TABLE Test2 ( T1 VARCHAR(32770) NOT NULL, T2 VARCHAR(32766) NOT NULL ) CHARACTER SET = 'latin1' COLLATE LATIN1_DANISH_CI;
Po izvedbi zgornjega stavka MySQL sproži napako. To pomeni, da največja velikost vrstice ne sme preseči 65.535 bajtov. V vsakem primeru, če se poveča, izjava ni uspela in MySQL bo ustvaril napako.
V drugem primeru recimo, da smo ustvarili tabelo z imenom Test3 z uporabo spodnje izjave:
CREATE TABLE Test3 ( Id INT PRIMARY KEY AUTO_INCREMENT, Name VARCHAR(5) NOT NULL );
Nato vstavite vrednosti v tabelo z uporabo spodnje izjave:
INSERT INTO Test3(Name) VALUES ('Stephen');
Zdaj pa izvedite zgornji stavek. MySQL izda sporočilo o napaki: Podatki so predolgi za stolpec »Ime« v 1. vrstici . Izhod to bolj jasno razloži.
MySQL VARCHAR in presledki
MySQL ne oblazini prostora za vrednosti varchar, ko so shranjene. MySQL je obdržal tudi končne presledke, ko je shranil ali pridobil vrednosti varchar. To lahko razumemo skozi naslednji primer, kjer an vstavi izjavo dodaja vrednosti v Ime stolpec tabele Test3 :
INSERT INTO Test3(Name) VALUES ('John ');
Nato izvedite stavek SELECT, da pridobite vrednosti.
SELECT Id, Name, length(Name) FROM Test3;
Podal bo naslednji rezultat, kjer je MySQL vključil končni presledek v štetje dolžine, ker ne poveča dolžine stolpca.
Vendar, ko poskušamo vstaviti vrednost varchar s končnimi presledki, ki presegajo dolžino stolpca, bo MySQL skrajšati zadnji prostori. Poleg tega MySQL izda a Opozorilo . Naslednji primer to pojasnjuje bolj jasno:
INSERT INTO Test3(Name) VALUES ('Peter ');
Zgornji stavek vstavi vrednost, katere dolžina je šest v stolpec z imenom. Vrednost je še vedno vstavljena v stolpec, vendar MySQL skrajša presledek na koncu, preden doda vrednost. Preverimo lahko s spodnjo poizvedbo, kjer lahko vidimo uspešno dodan stavek vstavi, vendar z opozorilom, ki daje: Podatki so okrnjeni za stolpec 'name' v 1. vrstici :
Razlika med podatkovnim tipom Char in Varchar
Sledita oba tipa podatkov char in varchar znak ASCII . So skoraj enaki, vendar se razlikujejo v shranjevanju in pridobivanju podatkov iz podatkovne baze. Naslednja tabela povzema bistvene razlike med podatkovnim tipom char in varchar:
CHAR | VARCHAR |
---|---|
To je značilno. | Označuje spremenljiv značaj. |
Shranjuje vrednosti v fiksni dolžini, ki jih deklariramo med ustvarjanjem tabele. | Vrednosti shrani v niz spremenljive dolžine z eno- ali dvobajtno predpono. |
Ta podatkovni tip je lahko dopolnjen s presledkom na koncu, da ohrani podano dolžino. | Te vrste podatkov ni mogoče dopolniti z nobenim znakom, vključno s presledkom, ko so shranjeni. |
Ne sme vsebovati več kot 255 znakov. | Vsebuje lahko do 65535 znakov. |
Podpira dodeljevanje statičnega pomnilnika. | Podpira dinamično dodeljevanje pomnilnika. |