powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / VARCHAR vs TEXT
23 сообщений из 23, страница 1 из 1
VARCHAR vs TEXT
    #38638179
Richard B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Помогите разобраться.

Есть тип данных VARCHAR, раньше максимальная длина его была 255 символов, потом увеличили до 65535. Также есть тип TEXT у которого длина также 65535 символов. Помимо этого, данные TEXT хранятся отдельно от основной таблицы что увеличивает время доступа к ним.

Отсюда вопрос: зачем вообще нужен TEXT, если он по всем параметрам проигрывает VARCHAR (и это при одинаковой длине строки)? Просто я заметил что TEXT до сих пор во всю используется в разных БД и по сей день. Может него все же есть какие-то преимущества относительно VARCHAR?
...
Рейтинг: 0 / 0
VARCHAR vs TEXT
    #38638200
Фотография ScareCrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
интересно сколько вы варчаров в таблицу сможете запихать
...
Рейтинг: 0 / 0
VARCHAR vs TEXT
    #38638201
Фотография ScareCrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
варчаров 65535
...
Рейтинг: 0 / 0
VARCHAR vs TEXT
    #38638248
Afelion
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В VARCHAR Вы можете указать, сколько символов будет храниться в атрибуте. Например, VARCHAR(5) - 5 символов.
В TEXT количество символов определяется вариантом этого типа данных: TINYTEXT - 256 байт, LONGTEXT - 4 гигабайта. И если Вы в атрибуте типа TINYTEXT храните 1 символ, то оставшееся простанство заполняется нулями. Это увеличивает время поиска и сортировки по этому атрибуту.
Так же, как я понимаю, TEXT хранится не в самой таблице, а где то за её пределами.

Почитайте эту статью, раздел COLLATIONS, то, что выделено красным.
...
Рейтинг: 0 / 0
VARCHAR vs TEXT
    #38638249
Afelion
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
...
Рейтинг: 0 / 0
VARCHAR vs TEXT
    #38638298
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AfelionИ если Вы в атрибуте типа TINYTEXT храните 1 символ, то оставшееся простанство заполняется нулямиА пацаны-то не знают (с)

раз: http://dev.mysql.com/doc/refman/5.0/en/blob.html For TEXT and BLOB columns, there is no padding on insert and no bytes are stripped on selec t.
два:авторStorage Requirements for String Types
<...>
Data TypeStorage RequiredBLOB, TEXTL + 2 bytes, where L < 2^16

В общем, не болтайте ерундой


И ещё. Вот тутAfelionВ VARCHAR Вы можете указать, сколько символов будет храниться в атрибуте. Например, VARCHAR(5) - 5 символов.надо бы уточнить, что это максимальное количество символов, которое может храниться в варчаре. Можно хранить и меньше (и места короткие строки занимать будут соответственно меньше). То же самое, собственно, и в text.

Да и в статье корявенько описано - НСД никакие нули никуда не добавляются - строки добиваются пробелами до равной длины. Впрочем, идея объяснена верно. А вот выделенное красным - чушь. При сравнении строки добиваются до длины максимальной из имеющихся строк, вовсе не до максимально допустимой длины.
...
Рейтинг: 0 / 0
VARCHAR vs TEXT
    #38638346
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tanglirПри сравнении строки добиваются до длины максимальной из имеющихся строкТехнически оно, может, и так. Не знаю, в код не смотрел. Но, замечу, алгоритмически это ни к чему.

А вот не балуется ли MySQL plain-буфером при сортировке - надо посмотреть. Некие смутные подозрения на эту тему у меня уже были.
Найдется кто-нибудь, кому не лень поставить эксперимент?
...
Рейтинг: 0 / 0
VARCHAR vs TEXT
    #38638590
Фотография ScareCrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автор Because BLOB and TEXT values can be extremely long, you might encounter some constraints in using them:

Only the first max_sort_length bytes of the column are used when sorting. The default value of max_sort_length is 1024.
...
Рейтинг: 0 / 0
VARCHAR vs TEXT
    #38639055
Richard B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Итак, прочитав сообщения, я так и не увидел ни одного преимуществу у TEXT относительно VARCHAR. Но почему он тогда по прежнему используется повсеместно? Вот таблица постов в Wordpress, к примеру. Короткие данные хранятся в VARCHAR а заголовок постов и текст постов хранится в TEXT, хотя и для них хватило бы VARCHAR.
...
Рейтинг: 0 / 0
VARCHAR vs TEXT
    #38639061
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Richard BИтак, прочитав сообщения, я так и не увидел ни одного преимуществу у TEXT относительно VARCHAR.Хоть и несколько расплывчато, но ответ был в первом же посте.
http://dev.mysql.com/doc/refman/5.5/en/column-count-limit.html Every table (regardless of storage engine) has a maximum row size of 65,535 bytes. Storage engines may place additional constraints on this limit, reducing the effective maximum row size.
...
BLOB and TEXT columns count from one to four plus eight bytes each toward the row-size limit because their contents are stored separately from the rest of the row.
...
Рейтинг: 0 / 0
VARCHAR vs TEXT
    #38639063
Фотография ScareCrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Richard BИтак, прочитав сообщения, я так и не увидел ни одного преимуществу у TEXT относительно VARCHAR. Но почему он тогда по прежнему используется повсеместно? Вот таблица постов в Wordpress, к примеру. Короткие данные хранятся в VARCHAR а заголовок постов и текст постов хранится в TEXT, хотя и для них хватило бы VARCHAR.


авторинтересно сколько вы варчаров 65535 в таблицу сможете запихать
...
Рейтинг: 0 / 0
VARCHAR vs TEXT
    #38639070
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ScareCrow,

Была задача впихнуть как можно более длинные varchar-ы в таблицу.
Вот что реально получилось в таблицу (Inno, 5.6 )

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
CREATE TABLE `MSG` (
  `MSG_ID` bigint(20) NOT NULL AUTO_INCREMENT,
  `MSG_DATE` datetime NOT NULL,
  `USER` varchar(700) DEFAULT NULL,
  `SEVERITY` smallint(6) NOT NULL,
  `MSG` varchar(8192) NOT NULL,
  `WK_SYSTEM_CODE` varchar(700) NOT NULL,
  `WK_PROCESS_CODE` varchar(700) DEFAULT NULL,
  `WK_COMPONENT_CODE` varchar(700) NOT NULL,
  `COMPONENT_INSTANCE_ID` varchar(700) DEFAULT NULL,
  `WK_OBJECT_CODE` varchar(700) DEFAULT NULL,
  `WK_OBJECT_NICKNAME` varchar(700) DEFAULT NULL,
  `MSEC` int(6) NOT NULL DEFAULT '0',
  KEY `MSG_ID` (`MSG_ID`),
  KEY `MSG_DATE` (`MSG_DATE`)
) ENGINE=InnoDB AUTO_INCREMENT=18930 DEFAULT CHARSET=utf8;



Никакими 65535 символами там и близко не пахнет.
...
Рейтинг: 0 / 0
VARCHAR vs TEXT
    #38639074
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivScareCrow,

Была задача впихнуть как можно более длинные varchar-ы в таблицу.
Вот что реально получилось в таблицу (Inno, 5.6 )

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
CREATE TABLE `MSG` (
  `MSG_ID` bigint(20) NOT NULL AUTO_INCREMENT,
  `MSG_DATE` datetime NOT NULL,
  `USER` varchar(700) DEFAULT NULL,
  `SEVERITY` smallint(6) NOT NULL,
  `MSG` varchar(8192) NOT NULL,
  `WK_SYSTEM_CODE` varchar(700) NOT NULL,
  `WK_PROCESS_CODE` varchar(700) DEFAULT NULL,
  `WK_COMPONENT_CODE` varchar(700) NOT NULL,
  `COMPONENT_INSTANCE_ID` varchar(700) DEFAULT NULL,
  `WK_OBJECT_CODE` varchar(700) DEFAULT NULL,
  `WK_OBJECT_NICKNAME` varchar(700) DEFAULT NULL,
  `MSEC` int(6) NOT NULL DEFAULT '0',
  KEY `MSG_ID` (`MSG_ID`),
  KEY `MSG_DATE` (`MSG_DATE`)
) ENGINE=InnoDB AUTO_INCREMENT=18930 DEFAULT CHARSET=utf8;




Никакими 65535 символами там и близко не пахнет.Ну да, примерно 40 Кбайт получается.
...
Рейтинг: 0 / 0
VARCHAR vs TEXT
    #38639089
Richard B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторинтересно сколько вы варчаров 65535 в таблицу сможете запихать

Хорошо, тогда изменю вопрос: зачем нужен TINYTEXT (с максимальной диной в 255 символов) если когда можно создать VARCHAR(255) который к тому же работает чуть быстрее за счет того что хранится в таблице а не отдельно?

И вопрос в догонку: типы данных TINYTEXT, TEXT, MEDIUMTEXT и LONGTEXT занимают столько сколько в низ помещено данных или они всегда округляются до максимальной длины? То есть поле TINYTEXT с одним символом будет занимать один байт или 255?
...
Рейтинг: 0 / 0
VARCHAR vs TEXT
    #38639135
Фотография ScareCrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторинтересно сколько вы варчаров 255 в таблицу сможете запихать
...
Рейтинг: 0 / 0
VARCHAR vs TEXT
    #38639136
Richard B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ScareCrowавторинтересно сколько вы варчаров 255 в таблицу сможете запихать

Эм, наверное я что-то не так знаю? Количество варчаров в таблице ограничено?
...
Рейтинг: 0 / 0
VARCHAR vs TEXT
    #38639139
Фотография ScareCrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
чукча нечетатель?

автор http://dev.mysql.com/doc/refman/5.5/en/column-count-limit.html
Every table (regardless of storage engine) has a maximum row size of 65,535 bytes. Storage engines may place additional constraints on this limit, reducing the effective maximum row size.
...
BLOB and TEXT columns count from one to four plus eight bytes each toward the row-size limit because their contents are stored separately from the rest of the row
...
Рейтинг: 0 / 0
VARCHAR vs TEXT
    #38639143
Richard B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ScareCrowчукча нечетатель?

Не могу в технический английский, а гуглотранслейтер переводит не очень внятно. Из написанного понял, что длина строки БД может быть не более 65535 байт. Получается что если создать таблицу с полем VARCAHR(65535) то уже не будет возможности добавить в неё другие поля, так-как строка таблицы будет уже полностью занятой. Я всё правильно понял?
...
Рейтинг: 0 / 0
VARCHAR vs TEXT
    #38639155
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Richard BПолучается что если создать таблицу с полем VARCAHR(65535) то уже не будет возможности добавить в неё другие поля, так-как строка таблицы будет уже полностью занятой. Я всё правильно понял?Правильно. Причем даже такую таблицу создать не сможете, т.к. еще нужно несколько байт на накладные расходы.

И, заметьте, ограничение в байтах, а не в символах.
...
Рейтинг: 0 / 0
VARCHAR vs TEXT
    #38639226
Richard B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miksoftRichard BПолучается что если создать таблицу с полем VARCAHR(65535) то уже не будет возможности добавить в неё другие поля, так-как строка таблицы будет уже полностью занятой. Я всё правильно понял?Правильно. Причем даже такую таблицу создать не сможете, т.к. еще нужно несколько байт на накладные расходы.

И, заметьте, ограничение в байтах, а не в символах.

Спасибо большое! Теперь все стало понятно. :)
...
Рейтинг: 0 / 0
VARCHAR vs TEXT
    #38639385
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
попробывал в dbforge создать таблицу с одним полем varchar(65536)
получил облом - пишет о максимальгной длине в 21845 байт.
что это за странное число?
...
Рейтинг: 0 / 0
VARCHAR vs TEXT
    #38639389
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
зы
кодировка utf8
если использовать latin1 длина 65532
...
Рейтинг: 0 / 0
VARCHAR vs TEXT
    #38639397
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
utf8 - 3 на символ, 21845*3=65535
3 байта служебных, итого 21844символа utf8
...
Рейтинг: 0 / 0
23 сообщений из 23, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / VARCHAR vs TEXT
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]