Гость
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Правильный размер varchar поля для набора символов UTF8? / 21 сообщений из 21, страница 1 из 1
11.10.2017, 14:21
    #39534709
X11
X11
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Правильный размер varchar поля для набора символов UTF8?
При создании varchar поля (UTF8) какой более правильный размер будет: 8 или 7, 256 или 255, 1024 или 1023?
Почему возник такой вопрос. Потому что максимальный размер можно указать не 8192, а 8191, т.е. на 1 байт меньше.
...
Рейтинг: 0 / 0
11.10.2017, 14:24
    #39534715
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Правильный размер varchar поля для набора символов UTF8?
X11,

сколько нужно согласно бизнес-логике столько и указывай.
8191 это просо максимальный размер VARCHAR в UTF-8. Это вытекает из того что ограничение на максимальный размер строки в байтах равен 32K-2
...
Рейтинг: 0 / 0
11.10.2017, 14:26
    #39534717
X11
X11
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Правильный размер varchar поля для набора символов UTF8?
Это я понимаю.
Просто вопрос с точки зрения оптимизации, особенно, если потом будет индекс по этому полю.
...
Рейтинг: 0 / 0
11.10.2017, 14:27
    #39534719
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Правильный размер varchar поля для набора символов UTF8?
X11,

забей на оптимизацию. Это не то место где нужно мозги ломать
...
Рейтинг: 0 / 0
11.10.2017, 14:42
    #39534730
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Правильный размер varchar поля для набора символов UTF8?
X11Просто вопрос с точки зрения оптимизации

Чем меньше, тем лучше.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
16.10.2017, 14:05
    #39536874
X11
X11
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Правильный размер varchar поля для набора символов UTF8?
Dimitry Sibiryakov, а потом переделывать, если не хватит символов?
...
Рейтинг: 0 / 0
16.10.2017, 14:37
    #39536897
kdv
kdv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Правильный размер varchar поля для набора символов UTF8?
X11Просто вопрос с точки зрения оптимизации
что? длина char и varchar - это ограничение на максимальное количество символов. На диске хранится ровно столько, сколько записано в поле. Записал туда 'X11', - значит там будет 3 символа, а не столько, сколько ты определил длину varchar.
X11256 или 255, 1024 или 1023?
кошмар какой. Пиши 250, 300, 1000, или 8000 - пофиг.
X11а потом переделывать, если не хватит символов?
utf8, собственно, имеет переменную длину символов. От 1 до 4 байт. Латинский алфавит - по 1 байту на символ. русские буквы (1251) - по 2 байта на символ. В utf8 в varchar(8000) у тебя влезет 4000 русских символов.
Если не хватит, переделаешь на blob.
...
Рейтинг: 0 / 0
16.10.2017, 15:01
    #39536920
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Правильный размер varchar поля для набора символов UTF8?
X11,

если длина слишком большая при сортировке может стать туго. А в плане хранения пофиг
...
Рейтинг: 0 / 0
16.10.2017, 15:16
    #39536925
X11
X11
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Правильный размер varchar поля для набора символов UTF8?
ок, не буду заморачиваться, спасибо
...
Рейтинг: 0 / 0
16.10.2017, 15:18
    #39536928
Arioch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Правильный размер varchar поля для набора символов UTF8?
kdvрусские буквы (1251) - по 2 байта на символ

Это как?

По два байта на русскую букву - это в UTF-16 и его старом подмножестве UCS2

А DOS, DOS alt, Windows, ISO, KOI8-R - это всё однобайтовые кодировки.
Тогда память экономили как могли.
...
Рейтинг: 0 / 0
16.10.2017, 15:20
    #39536930
Arioch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Правильный размер varchar поля для набора символов UTF8?
kdvВ utf8 в varchar(8000) у тебя влезет 4000 русских символов.

с фига ли?

в varchar(8000) влезет 8000 любых символов.
потому что считается длина в символах, а не в байтах.
если бы она считалась в байтах - то было бы varchar(32000)
...
Рейтинг: 0 / 0
16.10.2017, 15:35
    #39536944
kdv
kdv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Правильный размер varchar поля для набора символов UTF8?
AriochЭто как?
это вот так. Национальные символы в юникоде обычно занимают как минимум по 2 байта. Иначе они бы не влезли все в юникодовую таблицу.
читаем
http://www.ibase.ru/unicode_faq/
"А говорят, что в Unicode строки занимают больше места?"

под "1251" я имел в виду русские символы, которые соответствуют кодировке win1251. В юникоде они по 2 байта, см. выше.

В качестве примера приводить однобайтовые кодировки 866, win1251, и прочие - просто смешно.
https://ru.wikipedia.org/wiki/Кириллица_в_Юникоде

AriochПо два байта на русскую букву - это в UTF-16 и его старом подмножестве UCS2
да пофиг. Нац-символы в юникоде все равно многобайтовые. И по идее, имеют одно и то же значение в любом юникодном варианте.
uft8 хорош лишь тем, то в нем размер символа в байтах не фиксированный, а от 1 до 4 байт.

Ariochв varchar(8000) влезет 8000 любых символов.
потому что считается длина в символах, а не в байтах.
тут я лажанул, да. Проблема с 32768 однобайтовых и 8192 в юникоде в том, что для юникода считается по 4 байта на символ. Ограничение только отсюда.
В varchar(8192) character set utf8 влезет, конечно, 8192 русских буквы. Но занимать они будут 16к, а не 32к.
...
Рейтинг: 0 / 0
16.10.2017, 16:45
    #39536993
Arioch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Правильный размер varchar поля для набора символов UTF8?
kdvпод "1251" я имел в виду русские символы, которые соответствуют кодировке win1251.

а....
ну если так, то да, конечно.

Просто ты назвал кодировку 1251, а говорил о другой кодировке.
Я тебе не понял
...
Рейтинг: 0 / 0
16.10.2017, 17:02
    #39537020
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Правильный размер varchar поля для набора символов UTF8?
X11а потом переделывать, если не хватит символов?

Ну, если смог ни продумать головой, ни угадать - то таки да.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
16.10.2017, 17:42
    #39537038
notav
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Правильный размер varchar поля для набора символов UTF8?
Симонов Денисесли длина слишком большая при сортировке может стать туго. А в плане хранения пофиг
Симонов Денис, вы бы хоть проверяли свои утверждения прежде чем писать.

Посты из одной темы: 16433678 16434256 16464124 16468523
И про udf: 10593127

Из постов следует что влияет на расход оперативной памяти, на размер файла БД, на скорость создания индексов, на скорость работы с udf.
...
Рейтинг: 0 / 0
16.10.2017, 17:56
    #39537044
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Правильный размер varchar поля для набора символов UTF8?
notav,

я udf стараюсь не пользоваться без острой на то необходимости. В 99% случаев хватает встроенных функций или своих PSQL функций. Скорость создания индексов это следствие замедления сортировки.
Теперь про размер файла. Да немного влияет, но только потому что сжатие делается маленькими кусками (ЕМНИП 128 одинаковых символов может быть сжато в 2 байта). Но в приведённом примере ник сравнивает 1 и 32000 символов. Автор же топика играется плюс минус 1-10 символов для округления. По идее в 4.0 это (сжатие) должно быть улучшено.
...
Рейтинг: 0 / 0
16.10.2017, 19:55
    #39537078
kdv
kdv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Правильный размер varchar поля для набора символов UTF8?
notavИз постов следует что влияет на расход оперативной памяти, на размер файла БД, на скорость создания индексов, на скорость работы с udf.
из первых двух ссылок как раз следует, что не на размер БД влияет, а на размер temp-файла при сортировке. И это так и есть (напомню, что создание индекса - это тоже сортировка).
Кроме того, читать надо не только сами цитируемые сообщения, но и комментарии к ним.
...
Рейтинг: 0 / 0
17.10.2017, 07:15
    #39537173
notav
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Правильный размер varchar поля для набора символов UTF8?
kdvnotavИз постов следует что влияет на расход оперативной памяти, на размер файла БД, на скорость создания индексов, на скорость работы с udf.
из первых двух ссылок как раз следует, что не на размер БД влияет
Странно. Я вижу что в первой ссылке есть тест на размер БД, прям с самого начала сообщения.
...
Рейтинг: 0 / 0
17.10.2017, 09:31
    #39537233
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Правильный размер varchar поля для набора символов UTF8?
notav,

я же вроде пояснил про сжатие. Текущий алгоритм RLE позволяет сжать максимум с компрессией 64. В тесте размер VARCHAR поля увеличили в 32K раза, а размер БД вырос только в 10. Поэтому это можно считать не существенным.
...
Рейтинг: 0 / 0
17.10.2017, 10:22
    #39537294
kdv
kdv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Правильный размер varchar поля для набора символов UTF8?
notav,

да, про размер пропустил, но там чуть, и сразу про сортировку.
...
Рейтинг: 0 / 0
17.10.2017, 12:18
    #39537431
rdb_dev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Правильный размер varchar поля для набора символов UTF8?
У меня было нечто похожее: 19267497
...
Рейтинг: 0 / 0
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Правильный размер varchar поля для набора символов UTF8? / 21 сообщений из 21, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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