У меня были сомнения с MySQL. У меня есть поля, которые я могу легко ограничить некоторыми символами, такими как фамилия и другие, например, мини-журнал с определенным событием, которое, я думаю, не длиннее двух страниц (или меньше символов). Я знаю, что это довольно распространенный вопрос, я вижу много ссылок по этому поводу, но я не могу понять, в чем разница и правильный путь.
Вот выводы и сомнения, которые у меня есть, пожалуйста, поправьте меня, если я ошибаюсь:
—VARCHAR тип переменной, это не имеет значения если я установлю varchar (10) или varchar (65535), хотя не тот же 65536, который переходит к среднему тексту.
-varchar с тем или иным параметром одинаков, занимает только необходимое пространство, это только ограничение для сохранения и ограничение для представления.
—если я сделаю ограничение на стороне моего приложения, оно точно такое же и более гибкое.
-текст имеет фиксированную длину, если я установлю текст, он будет занимать 65535, использую я это или нет.
VARCHAR
-он перегружен необходимостью сначала найти длину поля.
-он имеет стоимость на один байт больше, где длина сохраняется.
-это сохранить в строке, что означает в таблице.
-всегда лучше.
текст
-он хранится вне таблицы, есть указатель на мой текст, это правда?
-у него есть фиксированное количество символов.
-длина, заданная как в varchar, так и в тексте, указана в символах, а не в байтах (предыдущие версии отличались)
-По этим причинам будет лучше всегда используйте varchar, есть только один случай, который не соответствует действительности, это случай, когда я точно знаю количество символов.
Во всех остальных случаях, которые являются наиболее распространенными, лучше использовать самый длинный varchar, поэтому это имена или фамилии (хотя я могу ограничить это текстом (35), но где я не знаю, является ли имя «Том» или «Федерико Гильермо Родриго Каэтано»), как для полевого вопроса или описания (более изменчиво), так и для текста, более крупного, например, мини-журнала, который может варьироваться от 0 до 3 страниц символов (это в моем случае , но мы можем довести его до крайности, например от 0 до 16 страниц текста, около 65535 символов).
Это правильно, особенно если мы не можем знать будущие реквизиты, например, самое длинное описание, если мы ограничиваем табличное пространство, изменение требований может быть сложной проблемой.
Наконец, как бонус 🙂 Что происходит с текстом длиной более 65535 символов, но кто может варьироваться? Разумно установить средний текст или длинный текст, если он может отличаться?
Я думаю, что ваши предположения не совсем верны и могут быть чрезмерно параноидальными или испорченными историческими проблемами, которые больше не действительны.
Как правило, лучше всего использовать VARCHAR
потому что MySQL и другие движки баз данных были оптимизированы, чтобы справиться с ними довольно хорошо. С исторической точки зрения (1990-е годы) были значительные различия в производительности при использовании таблиц со строками фиксированной длины по сравнению с переменной длиной, но сегодня это мало беспокоит.
Точно так же, TEXT
столбцы раньше сохраняли все свои данные вне данных первичной таблицы. Теперь я полагаю, что используется гибридный подход, при этом первые N символов сохраняются в строке, а остальные сохраняются в системе BLOB, если это необходимо. Это переменная длина по определению, один символ не использует 65535 байт для хранения.
Вам нужно будет использовать LONGTEXT
для гораздо больших блоков текста, но на этом этапе вы должны оценить, правильно ли вы используете базу данных. Хранение, извлечение и манипулирование огромными объектами может стать серьезной проблемой.
Я бы использовал VARCHAR(255)
для чего-либо «текст» по умолчанию и расширить его дольше, если необходимо. Сокращение, как правило, проблематично, за исключением очень узких случаев, например, когда вы храните код страны ISO, который по определению будет состоять из двух символов.
Предполагать, что имена содержат «не более 32 символов», почти всегда ошибочно. Оставьте их широко открытыми, если у вас нет веских причин поступить иначе.
Вы можете подумать, что такие вещи, как названия городов или местностей тоже короткие, но ты ошибаешься. Мир странное место. Ожидать неожидаемое.
Других решений пока нет …