Поиск по сайту:
Чтоб солнце заслонить — ушей ослиных мало (Кондрат Крапива).

Разница между VARCHAR и TEXT в MySQL

15.02.2022
Как установить MySQL на Ubuntu 16.04

MySQL имеет много типов данных для хранения строковых данных в таблице. VARCHAR и TEXT — два из них. Оба могут хранить максимум 65535 символов, но между этими типами данных, описанными в этом руководстве, есть некоторые различия.

 

VARCHAR против TEXT:

Существует много различий между типами данных VARCHAR и TEXT. Различия между этими типами данных описаны ниже.

 

Особенности VARCHAR и TEXT

Типы данных VARCHAR и TEXT по-разному хранят данные в таблице базы данных. Различные особенности этих типов данных описаны ниже.

VARCHARTEXT
В основном используется для хранения небольших строковых данных.В основном используется для хранения больших строковых данных.
Используется для хранения строковых данных переменной длины.Используется для хранения строковых данных фиксированной длины.
Максимальная длина строки может быть определена.Длина строки не может быть определена.
Индекс нельзя применять к этому типу данных.Индекс можно применять в этом типе данных.
Требуется длина + 1 байт пробела, если значение длины меньше или равно 255 символам, и длина + 2 байта пробела, если длина больше или равна 256 символам.Занимает длину +2 байта дискового пространства.
Работает медленнее.Работает быстрее.

 

Декларация VARCHAR и TEXT

Способы объявления типов данных VARCHAR и TEXT объясняются ниже путем создания двух таблиц с полем типов данных VARCHAR и TEXT. Длина требуется для определения типа данных VARCHAR, а длина не требуется для определения типа данных TEXT.

Читать  Установка и настройка PureFTPd с MySQL на VPS OpenSUSE Linux

Выполните следующую инструкцию CREATE DATABASE, чтобы создать базу данных с именем test_db.

CREATE DATABASE test_db;

 

Запустите следующую инструкцию запроса, чтобы выбрать базу данных test_db перед созданием таблицы.

USE test_db;

 

Выполните следующую инструкцию CREATE TABLE, чтобы создать таблицу клиентов, содержащую пять полей. Здесь тип данных поля id — целое число, а тип данных полей name, email, address и contact_no — varchar, содержащий значение длины.

CREATETABLE customers(
id INTNOT NULL PRIMARY KEY,
name VARCHAR(30) NOT NULL,
email VARCHAR(50),
address VARCHAR(300),
contact_no VARCHAR(15));

 

Выполните следующую инструкцию DESCRIBE, чтобы проверить структуру таблицы клиентов.

DESCRIBE customers;

 

Выполните следующий запрос INSERT, чтобы вставить три записи в таблицу клиентов.

INSERT INTO `customers` (`id`, `name`, `email`, `address`, `contact_no`) VALUES ('01', 'Andrey Ex', 'Andrey@gmail.com', '25, aaaaaaaaaaaaaa, Bangladesh ', '0191275634'),
       ('02', 'Sasha Destroyer', 'Sasha@gmail.com', 'bbbbbbbbbbbbbbbbbb', '01855342357'),
       ('03', 'Masha Bubba', 'Masha@hotmail.com', 'cccccccccccccc', NULL);

 

Запустите следующую инструкцию SELECT, чтобы прочитать все записи таблицы клиентов.

SELECT * FROM customers;

 

Запустите следующую инструкцию CREATE TABLE, чтобы создать таблицу сотрудников, содержащую пять полей. Тип данных поля id — целое число. Тип данных полей name, email и contact_no — varchar. Тип данных адресного поля — текст. Здесь для поля адреса не объявлено значение длины из-за текстового типа данных.

CREATETABLE employees(
id INTNOT NULL PRIMARY KEY,
name VARCHAR(30) NOT NULL,
email VARCHAR(50),
address TEXT,
contact_no VARCHAR(15));

 

Выполните следующую инструкцию DESCRIBE, чтобы проверить структуру таблицы сотрудников.

DESCRIBE employees;

 

Выполните следующий запрос INSERT, чтобы вставить три записи с одинаковым содержимым таблицы клиентов в таблицу сотрудников.

INSERT INTO `employees` (`id`, `name`, `email`, `address`, `contact_no`) VALUES ('01', 'Andrey Ex', 'Andrey@gmail.com', 'aaaaaaaaaaaaaaaaaaaaaaa', '0191275634'),
       ('02', 'Sasha Destroyer', 'Sasha@gmail.com', 'bbbbbbbbbbbbbbbbbbbbbb', '01855342357'),
       ('03', 'Masha Bubba', 'Masha@hotmail.com', 'ccccccccccccccccccc', NULL);

 

Выполните следующую инструкцию SELECT, чтобы прочитать все записи таблицы сотрудников.

SELECT * FROM employees;

 

Производительность VARCHAR и TEXT

Ранее уже упоминалось, что тип данных TEXT работает быстрее, чем тип данных VARCHAR. Вы должны выбрать базу данных, содержащую таблицы с полем типа данных VARCHAR и TEXT, и включить профилирование текущего сеанса MySQL, чтобы проверить, какой тип данных быстрее между VARCHAR и TEXT.

Читать  MySQL. REGEXP: поиск на основе регулярных выражений

База данных была выбрана здесь во время создания таблицы. Таким образом, нам не нужно выбирать его снова. Выполните следующую инструкцию SET, чтобы включить профилирование SESSION.

SET SESSION profiling = 1;

 

Выполните следующий запрос SELECT, чтобы прочитать все записи таблицы клиентов.

SELECT * FROM customers;

 

Выполните следующий запрос SELECT, чтобы прочитать все записи таблицы сотрудников.

SELECT * FROM employees;

 

Выполните следующую команду, чтобы проверить производительность двух предыдущих запросов SELECT.

SHOW PROFILES;

 

Следующий вывод появится после выполнения команды SHOW PROFILES. Согласно выходным данным, запрос SELECT для таблицы клиентов содержит поле адреса типа данных VARCHAR, требуемое 0,00101000 секунд, а запрос SELECT для таблицы сотрудников, содержащей поле адреса типа данных TEXT, требует 0,00078125 секунд. Это доказывает, что тип данных TEXT работает быстрее, чем тип данных VARCHAR для тех же данных.

Вы можете сравнить выходные данные следующих двух запросов, чтобы подробно проверить производительность типов данных VARCHAR и TEXT.

SELECT * FROM INFORMATION_SCHEMA.PROFILING WHERE QUERY_ID=1;

SELECT * FROM INFORMATION_SCHEMA.PROFILING WHERE QUERY_ID=2;

 

Вывод:

Оба типа данных VARCHAR и TEXT важны для создания таблиц в базе данных MySQL. Различия между этими типами данных были должным образом объяснены в этом руководстве с примерами, чтобы помочь пользователям MySQL выбрать правильный тип данных поля таблицы во время создания таблицы.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (1 оценок, среднее: 5,00 из 5)
Загрузка...
Поделиться в соц. сетях:


0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

**ссылки nofollow

2 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
hryx

Тогда какой смысл в Varchar (кроме задания длины), если во всём он проигрывает? А если учесть, что при работе с базами TEXT значительно быстрее, то какой смысл ограничивать длину данных?

Yakhyo

Ну как минимум можно задать индекс для Varchar

Это может быть вам интересно


Рекомендуемое
С нетерпением ждете сверхширокоугольного экрана Alienware QD-OLED, анонсированного в начале года? У нас…

Спасибо!

Теперь редакторы в курсе.