Я буду хранить длинную строку (45132 символа) в базе данных Postrgres, сохраняя при этом каждый символ (включая действительно редкие).

Postgres может хранить строки до 1 ГБ (см. Здесь).

Что касается максимального размера строки из 45132 символов, каков наихудший сценарий?

По моим (возможно, неуклюжим) расчетам Unicode может занимать до 4 байт на символ, поэтому длина строки в 1 ГБ будет 250 000 000 символов (поэтому мне не о чем беспокоиться), но моя логика / математика верна и существуют ли кодировки, которые потреблять больше памяти, чем Unicode, что мне может понадобиться?

Примечание: я предполагаю, что ASCII составляет 1 байт на символ, а Unicode - до 4 байтов на символ.

1 ответ1

1

Информация в связанной статье кажется неверной.

Согласно статье Postgres, типы символов PostgreSQL: CHAR, VARCHAR и TEXT:

Текстовый тип данных может хранить строку неограниченной длины.

Если вы не укажете целое число n для типа данных varchar , оно будет вести себя как текстовый тип данных. Производительность varchar (без n) и текста одинакова.

Единственное преимущество указания спецификатора длины для типа данных varchar заключается в том, что PostgreSQL проверит и выдаст ошибку, если вы попытаетесь вставить более длинную строку в столбец varchar (n) .

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

Единственный тип данных Unicode, который я нашел в главе « Поддержка набора символов», был UTF8, указанный как содержащий от 1 до 4 байтов:

Если большинство ваших символов - Latin1 (8 бит), то строка символов длиной 45132, закодированная в UTF8, займет намного меньше 1 ГБ или бесконечного размера, упомянутого в статье, намного ближе к 45132 байтов.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .