Varchar в MySQL е тип данни, използван за съхраняване на текст, чиято дължина може да бъде максимум 65535 знака . Колоните varchar в таблицата са от низ с променлива дължина който може да съдържа или число, или знак, или и двете. Този тип данни може да съхранява само 255 знака преди версия 5.0.3, но с тази версия и по-късни може да съдържа до 65 535 знака. Може да се съхранява в MySQL като a 1-байтов или 2-байтов префикс за дължина плюс действителен размер.
Префиксът за дължина указва дължината на байта на стойността на низа, а не максималния размер, който сме задали. Ако стойностите не изискват повече от 255 байта, колоната използва префикс за дължина плюс един байт. Ако стойностите изискват повече от 255 байта, колоната използва префикс за дължина плюс два байта.
Максималната дължина на VARCHAR в MySQL подлежи на максималния размер на реда от 65 535 байта, който се споделя между всички колони, с изключение на колоните TEXT/BLOB и използвания набор от знаци. Това означава, че общата колона не трябва да бъде повече от 65535 байта.
Нека го разберем с помощта на пример.
Ще създадем две таблици и ще ги наречем Test1 и Test2. И двете таблици съдържат две колони, наречени T1 и T2. Изпълнете следния оператор, за да създадете таблица ' Тест 1 ':
CREATE TABLE Test1 ( T1 VARCHAR(32765) NOT NULL, T2 VARCHAR(32766) NOT NULL ) CHARACTER SET = 'latin1' COLLATE LATIN1_DANISH_CI;
Горният израз създаде таблица успешно, тъй като дължината на колоната T1 = 32765 плюс 2 байта и T2 = 32766 плюс 2 байта е равна на 65535 (32765+2+32766+2). И така, дължината на колоната отговаря на максималния размер на реда на varchar, който е 65535.
Сега ще видим какво се случва, ако размерът на колоната превишава максималния размер на varchar 65535. Изпълнете израза по-долу, където имаме увеличаване на размера на колона T1, за да създадете таблица Тест2 :
CREATE TABLE Test2 ( T1 VARCHAR(32770) NOT NULL, T2 VARCHAR(32766) NOT NULL ) CHARACTER SET = 'latin1' COLLATE LATIN1_DANISH_CI;
След изпълнение на горния оператор MySQL генерира грешката. Това означава, че максималният размер на реда не може да надвишава 65 535 байта. Във всеки случай, ако се увеличи, операторът е неуспешен и MySQL ще генерира грешка.
В друг случай, да предположим, че сме създали таблица с име Тест3 използвайки следното изявление:
CREATE TABLE Test3 ( Id INT PRIMARY KEY AUTO_INCREMENT, Name VARCHAR(5) NOT NULL );
След това вмъкнете стойности в таблицата, като използвате израза по-долу:
INSERT INTO Test3(Name) VALUES ('Stephen');
Сега изпълнете горния оператор. MySQL дава съобщение за грешка: Данните са твърде дълги за колона „Име“ на ред 1 . Резултатът го обяснява по-ясно.
MySQL VARCHAR и интервали
MySQL не допълва място за стойностите на varchar, когато се съхраняват. MySQL също запазваше крайните интервали, когато съхраняваше или извличаше стойности на varchar. Можем да го разберем чрез следния пример, където an вмъкнете изявление добавя стойности в Име колона на таблицата Тест3 :
INSERT INTO Test3(Name) VALUES ('John ');
След това изпълнете израза SELECT, за да извлечете стойностите.
SELECT Id, Name, length(Name) FROM Test3;
Той ще даде следния изход, където MySQL включва крайния интервал в броенето на дължината, тъй като не увеличава дължината на колоната.
Въпреки това, когато се опитаме да вмъкнем стойност на varchar със завършващи интервали, които надвишават дължината на колоната, MySQL ще съкращавам задните интервали. Освен това MySQL издава a внимание . Следният пример го обяснява по-ясно:
INSERT INTO Test3(Name) VALUES ('Peter ');
Горният израз вмъква стойност, чиято дължина е шест в колоната за име. Стойността все още е вмъкната в колоната, но MySQL съкращава крайното пространство, преди да добави стойността. Можем да проверим с помощта на заявката по-долу, където можем да видим оператора за вмъкване, добавен успешно, но с предупреждение, което дава: Данните са съкратени за колона „име“ на ред 1 :
Разлика между тип данни Char и Varchar
Следват двата типа данни char и varchar ASCII знак . Те са почти еднакви, но се различават по отношение на съхранението и извличането на данните от базата данни. Следната таблица обобщава основните разлики между типа данни char и varchar:
CHAR | VARCHAR |
---|---|
Има характер. | Това означава променлив характер. |
Той съхранява стойностите във фиксирана дължина, които декларираме, докато създаваме таблица. | Той съхранява стойностите в низ с променлива дължина с префикс с дължина от един или два байта. |
Този тип данни може да бъде допълнен с крайно пространство, за да се запази определената дължина. | Този тип данни не може да бъде подплатен с никакъв знак, включително интервал, когато се съхраняват. |
Не може да съдържа повече от 255 знака. | Може да съдържа до 65 535 знака. |
Поддържа статично разпределение на паметта. | Поддържа динамично разпределение на паметта. |