Ссылаясь на документацию Postgres на Типы символов, я неясен в отношении указания длины для изменяющихся символов (varchar).
Предположение:
- длина строки не имеет значения для приложения.
- вам все равно, что кто-то устанавливает максимальный размер в базе данных
- у вас есть неограниченное место на жестком диске
Он упоминает:
Требование к хранению короткой строки (до 126 байтов) - 1 байт плюс фактическая строка, которая включает пробел в корпусе характера. Более длинные строки имеют 4 байта служебных данных вместо 1. Длинные строки автоматически сжимаются системой, поэтому физическое требование на диске может быть меньше. Очень длинные значения также хранятся в фоновых таблицах, чтобы они не мешали быстрому доступ к более коротким значениям столбцов. В любом случае, самое длинное символьная строка, которая может быть сохранена, составляет около 1 ГБ. (Максимальное значение который будет разрешен для n в объявлении типа данных, меньше, чем что. Было бы нецелесообразно изменять это, потому что с многобайтом кодировки символов количество символов и байтов может быть вполне отличается.
Это говорит о размере строки, а не о размере поля (т.е. кажется, что он всегда будет сжимать большую строку в большом поле varchar, но не маленькую строку в большом поле varchar?)
Я задаю этот вопрос, так как было бы намного проще (и ленив) указать гораздо больший размер, поэтому вам не придется беспокоиться о том, что строка слишком велика. Например, если я укажу varchar (50) для имени места, я получу местоположения с большим количеством символов (например, Llanfairpwllgwyngyllgogerychwyrndrobwllllantysiliogogogoch), но если я укажу varchar (100) или varchar (500), то я не буду разбираться в этой проблеме.
Итак, вы получили бы удар производительности между varchar (500) и (произвольно) varchar (5000000) или text(), если ваша самая большая строка насчитывала 400 символов?
Также не представляет интереса, если у кого-то есть ответ на этот вопрос И знает ответ на это для других баз данных, добавьте это тоже.
У меня есть googled, но не нашел достаточно технического объяснения.