Это varchar
просто остаток до того, как text
пришел, или есть случаи, когда вы хотели бы использовать varchar
? (Или char
в этом отношении ..)
(Я использую Postgres и MySQL (MyISAM) ежедневно, так что это то, что меня больше всего интересует, но ответы для других баз данных, конечно, приветствуются. ^ _-)
text
является устаревшим. Есть также соображения об использовании, которые связаны с тем, где хранятся данные и каким образом к ним осуществляется доступ.Ответы:
В целом
text
столбцы нестандартные и специфичные для реализации. Во многих случаях, в зависимости от базы данных, они могут иметь комбинацию одного или нескольких из следующих ограничений: не индексируется , не подлежит поиску и не сортируется .В Postgres
Все эти типы сохраняются внутри, используя одну и ту же структуру данных C. ,
В MySQL
text
Колонна является специализированной версиейBLOB
и имеет ограничения по индексации.Только эти два примера могут быть экстраполированы на другие системы РСУБД SQL и должны быть достаточной причиной, чтобы понять, когда выбирать один тип по сравнению с другим.
CHAR
когда вы знаете, что у вас есть фиксированное количество символов для каждой записи.VARCHAR
когда у вас есть переменное количество символов для каждой записи.VARCHAR
может предоставить,CLOB
сUTF-8
кодировкой или эквивалентным стандартным типом.TEXT
поскольку это нестандартно.источник
non standard and implementation specific
иnot indexable, not searchable and not sortable
, что я не понял. Я под впечатлениемtext
был стандартизирован.text
стандарт ASCII или стандарт UNICODEtext
:-) или один из других полудюжиныtext
стандартов кодирования?text
символьного типа. Я ничего не видел, некоторые производители называют этоlong char
и тому подобное, это в основном BLOB с кодировкой.TEXT
». Если вы собираетесь перейти на другую базу данных, что вряд ли дело выключатель, тем более , что вы должны учитывать , что Postgres' неограниченныйVARCHAR
(из - за TOAST нет никаких ограничений строки , как, например , с MySQL) не может перевести к неограниченнымVARCHAR
ин другие базы данных в любом случае.text
,varchar
Иchar
все они используются по разным причинам. Конечно, есть различия в реализации (сколько они занимают ... и т. Д.), Но есть и соображения по использованию и намерениям . Какой тип вы используете, также говорит вам что-то о типе данных, которые будут храниться в нем (или мы все будем использоватьtext
для всего ). Если что-то имеет фиксированную длину, мы используемchar
. Если он имеет переменную длину с четко определенным верхним пределом, используйтеvarchar
. Если это большой кусок текста, над которым у вас мало контроля, тоtext
, вероятно, будет вашим лучшим выбором.источник
char
,varchar
иtext
все предназначены для хранения того же типа данных. Так что оба ответа здесь о проверке границ. Если существуют различия в эффективности, каковы они? Зачем мне использоватьvarchar
болееtext
?Базы данных сильно озабочены производительностью - скоростью и минимизацией хранилища. В большинстве других частей компьютерного мира вас не будет беспокоить количество символов в вашей строке символов; это может быть один, это может быть все содержание энциклопедии; это всего лишь строка. На самом деле, многие языки даже не беспокоятся о том, является ли это строкой или числом.
Но по мере того, как компьютеры работают быстрее и получают больше памяти, люди помещают больше данных в свои базы данных и выполняют более сложные запросы. Для базы данных ЦП и память сегодня столь же ограничены, как и во времена 64КБ основной памяти и 10МБ жестких дисков (на мэйнфреймах ).
С фиксированным числом байтов гораздо проще работать, чем с переменной длиной. С 10 байтами гораздо легче справиться, чем с 1 000 000. Итак, ваша база данных хочет, чтобы вы дали ей подсказку, чтобы она могла дать вам гигабайт результатов из террабайтов данных в микросекундах. Если вы не используете свою базу данных так сильно, вам не понадобится скорость, которую она предлагает, и вы будете раздражены ненужными вопросами. Но если вам нужно представление, вы будете рады дать ему несколько советов.
Как отмечено в других ответах, используйте,
char
если оно всегда использует определенное количество символов,varchar
если длина может варьироваться, но она не становится слишком большой (я предполагаю, что большинство БД обрабатывают ее какchar
или вtext
зависимости от размера), иtext
если она может быть любой длины. Если ваш SQL пытается использоватьtext
столбец, возможно, было бы лучше как-то суммировать его и поместить в столбецchar
или в небольшойvarchar
столбец, а затем сделатьwhere
«иorder by
». Конечно, это только если производительность важна для вас.источник