Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737 Форумы портала PHP.SU :: Тип поля MySQL для данных неизвестной длины
Покинул форум
Сообщений всего: 645
Дата рег-ции: Янв. 2012 Откуда: Армавир, Краснодарский край
Помог: 15 раз(а)
Всем доброго вечера по Москве)
Стоит задача выбрать тип поля MySql для данных неизвестной длины. Там могут быть как 5-10 символов UTF-8, так и 10'000-20'000. Вариантов рассматриваю два: varchar(65535) и text. Насколько я знаю, поле Text не хранит сами данные, а содержит указатель на файл с данными, посему работает медленнее varchar. Т.е., нежелательно. С другой стороны, некоторые отговаривают от использования varchar(65535) в силу того, что старые версии mysql поддерживают длину поля типа varchar только до 255.
Какой из вариантов использовали бы вы?
UPD. Только сейчас вспомнил, что нужно будет использовать атрибут DEFAULT, чего text не умеет. Text отпал сам по себе. Подскажите по varchar, опасно ли использовать 65535? Какова вероятность того, что приложение поставят на сервере, на котором MySQL стоит ниже 5.0.3? Спасибо.
Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009 Откуда: Россия, Санкт-Петербург
Помог: 618 раз(а)
Vinyl пишет:
посему работает медленнее varchar
Есть варианты. Varchar вычитывается всегда, даже когда не нужен для результата.
Vinyl пишет:
Подскажите по varchar, опасно ли использовать 65535?
Безопасно, другой вопрос, что столько использовать вы не сможете. 64кб - максимальный размер строки в таблице, т.е. сумма максимальных длин всех полей.
----- PostgreSQL DBA
Vinyl
Отправлено: 24 Мая, 2013 - 21:00:42
Частый посетитель
Покинул форум
Сообщений всего: 645
Дата рег-ции: Янв. 2012 Откуда: Армавир, Краснодарский край
Помог: 15 раз(а)
Мелкий пишет:
максимальный размер строки в таблице, т.е. сумма максимальных длин всех полей.
Т.е. в одной таблице я могу использовать 1 поле varchar 64Кб, либо два поля по 32 Кб, либо 4 по 16? Правильно понял?
Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007 Откуда: Berlin
Помог: 707 раз(а)
Правильно. Независимо от storage-engine сумма размеров всех полей не должна превосходить 65535 байт (то есть, на самом деле не 64Кб, а 64Кб - 1 байт). Обратите внимание, что для utf8, например, символ занимает до 3 байт, что наложит дополнительные ограничения по числу символов. Аналогично и для других многобайтовых кодировок.
----- Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
Vinyl
Отправлено: 24 Мая, 2013 - 21:08:23
Частый посетитель
Покинул форум
Сообщений всего: 645
Дата рег-ции: Янв. 2012 Откуда: Армавир, Краснодарский край
Помог: 15 раз(а)
А как же быть, если понадобится больше? И нужны поля, у которых можно установить Default? Не создавать же отдельные таблицы, это абсурд, на мой взгляд.
Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007 Откуда: Berlin
Помог: 707 раз(а)
Данных - нет, это ограничение не касается (поскольку они хранятся отдельно), но, тем не менее, само объявление такой колонки, разумеется, войдёт в общую длину строки (то есть, длина указателя будет учитываться)
----- Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
Vinyl
Отправлено: 24 Мая, 2013 - 21:42:14
Частый посетитель
Покинул форум
Сообщений всего: 645
Дата рег-ции: Янв. 2012 Откуда: Армавир, Краснодарский край
Помог: 15 раз(а)
Понял. Тогда, наверное, придется пренебречь скоростью, организовать вставку Default-значения на уровне приложения и использовать тип полей text. Спасибо ещё раз!
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.