Varchar у MySQL — це тип даних, який використовується для зберігання тексту, довжина якого може мати максимум 65535 символів . Стовпці varchar у таблиці складаються з рядок змінної довжини який може містити чи число, або символ, або обидва. Цей тип даних може зберігати лише 255 символів до версії 5.0.3, але з цією версією та пізнішими він може містити до 65535 символів. Він може зберігатися в MySQL як 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. Ми можемо зрозуміти це на наступному прикладі, де ан вставити заяву додає значення в Ім'я колонка таблиці Тест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 символів. | Він може містити до 65535 символів. |
Він підтримує статичний розподіл пам'яті. | Він підтримує динамічний розподіл пам'яті. |