Es varchar
sólo un remanente de delante text
dio la vuelta, o hay casos de uso donde usted quiera usar una varchar
? (O char
para el caso ..)
(Uso Postgres y MySQL (MyISAM) a diario, así que eso es lo que más me interesa, pero las respuestas para otras bases de datos son bienvenidas. ^ _-)
database
performance
mysql
efficiency
postgres
Izkata
fuente
fuente
text
está en desuso. También hay consideraciones de uso que están relacionadas con el lugar donde se almacenan los datos y cómo se accede a ellos.Respuestas:
En general
text
Las columnas no son estándar y son específicas de la implementación. En muchos casos, dependiendo de la base de datos, pueden tener una combinación de una o más de las siguientes restricciones: no indexables , no buscables y no clasificables .En Postgres
Todos estos tipos se guardan internamente utilizando la misma estructura de datos en C. .
En MySQL
La
text
columna es una versión especializadaBLOB
y tiene restricciones de indexación.Solo estos dos ejemplos pueden extrapolarse a los otros sistemas SQL RDBMS y deben ser motivo suficiente para comprender cuándo elegir un tipo sobre el otro.
CHAR
cuando sepa que tiene un número fijo de caracteres para cada entrada.VARCHAR
cuando tenga un número variable de caracteres para cada entrada.VARCHAR
puede proporcionar,CLOB
conUTF-8
codificación o tipo estándar equivalente.TEXT
ya que no es estándar.fuente
non standard and implementation specific
ynot indexable, not searchable and not sortable
no me di cuenta. Estaba bajo la impresión de quetext
estaba estandarizado.text
estándar ASCII o altext
estándar UNICODE :-) o una de las otras media docena detext
estándares de codificación?text
como un tipo de carácter. No he visto nada, algunos proveedores lo llamanlong char
y similares, es básicamente un BLOB con una codificación adjunta.TEXT
". Si va a migrar a una base de datos diferente, eso no es un factor decisivo, especialmente porque tendrá que considerar que los postgres 'ilimitadosVARCHAR
(debido a TOAST no hay límite de fila como, por ejemplo, con MySQL) pueden no traducirse en ilimitadoVARCHAR
en otras bases de datos de todos modos.text
,varchar
ychar
todos se usan por diferentes razones. Por supuesto, existen diferencias de implementación (cuánto tamaño ocupan, etc.), pero también hay consideraciones de uso e intención . El tipo que usa también le dice algo sobre el tipo de datos que se almacenarán en él (o todos lo usaríamostext
para todo ). Si algo tiene una longitud fija, usamoschar
. Si tiene una longitud variable con un límite superior bien definido, úselovarchar
. Si es un gran fragmento de texto sobre el que tiene poco control, entoncestext
probablemente sea su mejor opción.fuente
char
,varchar
, ytext
están diseñados para almacenar el mismo tipo de datos. Entonces, ambas respuestas aquí son sobre la verificación de límites. Si hay diferencias de eficiencia, ¿cuáles son? ¿Por qué usaríavarchar
mástext
?Las bases de datos están muy preocupadas por el rendimiento: velocidad y minimización del almacenamiento. En la mayoría de las otras partes del mundo de la informática, no le molestará cuántos caracteres hay en su cadena de caracteres; podría ser uno, podría ser todo el contenido de una enciclopedia; todo es solo una cuerda. De hecho, muchos idiomas ni siquiera te molestan si se trata de una cadena o un número.
Pero a medida que las computadoras se vuelven más rápidas y ganan más memoria, las personas colocan más datos en sus bases de datos y hacen consultas más sofisticadas. Para una base de datos, la CPU y la memoria son tan limitantes hoy como lo fueron en los días de la memoria principal de 64Kb y los discos duros de 10Mb (en computadoras mainframe ).
Un número fijo de bytes es mucho más fácil de manejar que un número de longitud variable. 10 bytes es mucho más fácil de manejar que 1,000,000. Por lo tanto, su base de datos quiere que le dé una pista para poder darle un gigabyte de resultados de terrabytes de datos en microsegundos. Si no está usando su base de datos con tanta fuerza, no necesitará la velocidad que ofrece y se molestará con las preguntas innecesarias. Pero si necesita el rendimiento, estará encantado de darle algunas pistas.
Como se señaló en las otras respuestas, use
char
si siempre usa un cierto número de caracteres,varchar
si la longitud puede variar pero no es demasiado grande ( supongo que la mayoría de los DB lo tratan comochar
otext
dependiendo del tamaño), ytext
si Podría ser de cualquier longitud. Si su SQL intenta usar unatext
columna, podría ser mejor resumirlo de alguna manera y ponerlo también en una columnachar
pequeñavarchar
, luego hagawhere
'sorder by
' y 's' sobre eso. Por supuesto, eso solo si el rendimiento es importante para usted.fuente