Базы данных сильно озабочены производительностью - скоростью и минимизацией хранилища. В большинстве других частей компьютерного мира вас не будет беспокоить количество символов в вашей строке символов; это может быть один, это может быть все содержание энциклопедии; это всего лишь строка. На самом деле, многие языки даже не беспокоятся о том, является ли это строкой или числом.
Но по мере того, как компьютеры работают быстрее и получают больше памяти, люди помещают больше данных в свои базы данных и выполняют более сложные запросы. Для базы данных ЦП и память сегодня столь же ограничены, как и во времена 64КБ основной памяти и 10МБ жестких дисков (на мэйнфреймах ).
С фиксированным числом байтов гораздо проще работать, чем с переменной длиной. С 10 байтами гораздо легче справиться, чем с 1 000 000. Итак, ваша база данных хочет, чтобы вы дали ей подсказку, чтобы она могла дать вам гигабайт результатов из террабайтов данных в микросекундах. Если вы не используете свою базу данных так сильно, вам не понадобится скорость, которую она предлагает, и вы будете раздражены ненужными вопросами. Но если вам нужно представление, вы будете рады дать ему несколько советов.
Как отмечено в других ответах, используйте, charесли оно всегда использует определенное количество символов, varcharесли длина может варьироваться, но она не становится слишком большой (я предполагаю, что большинство БД обрабатывают ее как charили в textзависимости от размера), и textесли она может быть любой длины. Если ваш SQL пытается использовать textстолбец, возможно, было бы лучше как-то суммировать его и поместить в столбец charили в небольшой varcharстолбец, а затем сделать where«и order by». Конечно, это только если производительность важна для вас.
textявляется устаревшим. Есть также соображения об использовании, которые связаны с тем, где хранятся данные и каким образом к ним осуществляется доступ.