Варцхар у МиСКЛ-у је тип података који се користи за складиштење текста чија дужина може имати највише 65535 знакова . Колоне варцхар у табели су од стринг променљиве дужине који може садржати или нумерички или карактерни или обоје. Овај тип података је способан да ускладишти само 255 знакова пре верзије 5.0.3, али са овом верзијом и новијом, може да задржи до 65535 знакова. Може се ускладиштити у МиСКЛ као а 1-бајт или 2-бајт префикс дужине плус стварна величина.
Префикс дужине одређује дужину бајта вредности стринга, а не максималну величину коју смо поставили. Ако вредности не захтевају више од 255 бајтова, колона користи префикс дужине плус један бајт. Ако вредности захтевају више од 255 бајтова, колона користи префикс дужине плус два бајта.
Максимална дужина ВАРЦХАР ин МиСКЛ подлеже максималној величини реда од 65.535 бајтова, која се дели између свих колона осим ТЕКСТ/БЛОБ колона и коришћеног скупа знакова. То значи да укупна колона не би требало да буде већа од 65535 бајтова.
Хајде да то разумемо уз помоћ примера.
Направићемо две табеле и назвати их Тест1 и Тест2. Обе табеле садрже две колоне под називом Т1 и Т2. Извршите следећу наредбу да бисте креирали табелу ' Тест 1 ':
CREATE TABLE Test1 ( T1 VARCHAR(32765) NOT NULL, T2 VARCHAR(32766) NOT NULL ) CHARACTER SET = 'latin1' COLLATE LATIN1_DANISH_CI;
Горња изјава је успешно креирала табелу јер је дужина колоне Т1 = 32765 плус 2 бајта и Т2 = 32766 плус 2 бајта једнака 65535 (32765+2+32766+2). Дакле, дужина колоне задовољава максималну величину реда варцхара, која је 65535.
Сада ћемо видети шта се дешава ако величина колоне превазилази максимална величина варцхар 65535. Извршите доњу наредбу где имамо повећање величине колоне Т1 да креирамо табелу Тест2 :
CREATE TABLE Test2 ( T1 VARCHAR(32770) NOT NULL, T2 VARCHAR(32766) NOT NULL ) CHARACTER SET = 'latin1' COLLATE LATIN1_DANISH_CI;
Након извршења горње наредбе, МиСКЛ производи грешку. То значи да максимална величина реда не може бити већа од 65.535 бајтова. У сваком случају, ако се повећа, изјава није успела и МиСКЛ ће генерисати грешку.
У другом случају, претпоставимо да смо креирали табелу под називом Тест3 користећи следећу изјаву:
CREATE TABLE Test3 ( Id INT PRIMARY KEY AUTO_INCREMENT, Name VARCHAR(5) NOT NULL );
Затим уметните вредности у табелу користећи следећу изјаву:
INSERT INTO Test3(Name) VALUES ('Stephen');
Сада извршите горњу наредбу. МиСКЛ даје поруку о грешци: Подаци су предугачки за колону „Име“ у реду 1 . Излаз то јасније објашњава.
јава апстрактна класа
МиСКЛ ВАРЦХАР и простори
МиСКЛ не попуњава простор за варцхар вредности када се чувају. МиСКЛ је такође задржао размаке на крају када је чувао или преузимао вредности варцхар. То можемо разумети кроз следећи пример где је ан уметните изјаву додаје вредности у Име колона табеле Тест3 :
INSERT INTO Test3(Name) VALUES ('John ');
Затим извршите наредбу СЕЛЕЦТ да бисте преузели вредности.
SELECT Id, Name, length(Name) FROM Test3;
То ће дати следећи излаз где је МиСКЛ укључио задњи простор у бројање дужине јер не повећава дужину колоне.
Међутим, када покушамо да убацимо вредност варцхар са размацима који су премашили дужину колоне, МиСКЛ ће окрњити задњи простори. Такође, МиСКЛ издаје а упозорење . Следећи пример то јасније објашњава:
INSERT INTO Test3(Name) VALUES ('Peter ');
Горњи исказ убацује вредност чија је дужина шест у колону имена. Вредност је и даље уметнута у колону, али МиСКЛ скраћује размак на крају пре него што дода вредност. Можемо да верификујемо коришћењем упита у наставку где можемо да видимо успешно додату изјаву за уметање, али са упозорењем које даје: Подаци су скраћени за колону „име“ у реду 1 :
Разлика између Цхар и Варцхар типа података
Следе типови података цхар и варцхар АСЦИИ карактер . Они су скоро исти, али се разликују у складиштењу и преузимању података из базе података. Следећа табела сумира суштинске разлике између типа података цхар и варцхар:
ЦХАР | ВАРЦХАР |
---|---|
То је карактер. | Означава променљиви карактер. |
Чува вредности у фиксној дужини које декларишемо током креирања табеле. | Он чува вредности у низу променљиве дужине са префиксом дужине од једног или два бајта. |
Овај тип података може бити допуњен размаком на крају да би се задржала наведена дужина. | Овај тип података не може бити допуњен ниједним знаком, укључујући размак, када се чувају. |
Не може да садржи више од 255 знакова. | Може да садржи до 65535 знакова. |
Подржава статичку алокацију меморије. | Подржава динамичку алокацију меморије. |