Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / VARCHAR vs TEXT / 23 сообщений из 23, страница 1 из 1
11.05.2014, 22:40:21
    #38638179
Richard B
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VARCHAR vs TEXT
Помогите разобраться.

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

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

Почитайте эту статью, раздел COLLATIONS, то, что выделено красным.
...
Рейтинг: 0 / 0
12.05.2014, 01:53:27
    #38638249
Afelion
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VARCHAR vs TEXT
...
Рейтинг: 0 / 0
12.05.2014, 07:43:53
    #38638298
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VARCHAR vs TEXT
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
12.05.2014, 09:44:37
    #38638346
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VARCHAR vs TEXT
tanglirПри сравнении строки добиваются до длины максимальной из имеющихся строкТехнически оно, может, и так. Не знаю, в код не смотрел. Но, замечу, алгоритмически это ни к чему.

А вот не балуется ли MySQL plain-буфером при сортировке - надо посмотреть. Некие смутные подозрения на эту тему у меня уже были.
Найдется кто-нибудь, кому не лень поставить эксперимент?
...
Рейтинг: 0 / 0
12.05.2014, 12:28:44
    #38638590
ScareCrow
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VARCHAR vs TEXT
автор 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
12.05.2014, 17:55:47
    #38639055
Richard B
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VARCHAR vs TEXT
Итак, прочитав сообщения, я так и не увидел ни одного преимуществу у TEXT относительно VARCHAR. Но почему он тогда по прежнему используется повсеместно? Вот таблица постов в Wordpress, к примеру. Короткие данные хранятся в VARCHAR а заголовок постов и текст постов хранится в TEXT, хотя и для них хватило бы VARCHAR.
...
Рейтинг: 0 / 0
12.05.2014, 18:01:19
    #38639061
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VARCHAR vs TEXT
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
12.05.2014, 18:03:22
    #38639063
ScareCrow
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VARCHAR vs TEXT
Richard BИтак, прочитав сообщения, я так и не увидел ни одного преимуществу у TEXT относительно VARCHAR. Но почему он тогда по прежнему используется повсеместно? Вот таблица постов в Wordpress, к примеру. Короткие данные хранятся в VARCHAR а заголовок постов и текст постов хранится в TEXT, хотя и для них хватило бы VARCHAR.


авторинтересно сколько вы варчаров 65535 в таблицу сможете запихать
...
Рейтинг: 0 / 0
12.05.2014, 18:09:50
    #38639070
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VARCHAR vs TEXT
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
12.05.2014, 18:18:13
    #38639074
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VARCHAR vs TEXT
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
12.05.2014, 18:34:52
    #38639089
Richard B
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VARCHAR vs TEXT
авторинтересно сколько вы варчаров 65535 в таблицу сможете запихать

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

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

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

автор 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
12.05.2014, 19:38:35
    #38639143
Richard B
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VARCHAR vs TEXT
ScareCrowчукча нечетатель?

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

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

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

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


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