Solución:
los VARCHAR(MAX)
tipo es un reemplazo para TEXT
. La diferencia básica es que un TEXT
tipo siempre almacenará los datos en un blob mientras que el VARCHAR(MAX)
type intentará almacenar los datos directamente en la fila a menos que exceda la limitación de 8k y en ese momento los almacene en un blob.
El uso de la declaración LIKE es idéntico entre los dos tipos de datos. La funcionalidad adicional VARCHAR(MAX)
te da es que también se puede usar con =
y GROUP BY
como cualquier otro VARCHAR
columna puede ser. Sin embargo, si tiene muchos datos, tendrá un gran problema de rendimiento al utilizar estos métodos.
En cuanto a si debe usar LIKE
para buscar, o si debe usar Indexación de texto completo y CONTAINS
. Esta pregunta es la misma independientemente de VARCHAR(MAX)
o TEXT
.
Si está buscando una gran cantidad de texto y el rendimiento es clave, debe utilizar un Índice de texto completo.
LIKE
es más simple de implementar y, a menudo, es adecuado para pequeñas cantidades de datos, pero tiene un rendimiento extremadamente bajo con grandes datos debido a su incapacidad para usar un índice.
Para texto grande, el índice de texto completo es mucho más rápido. Pero puedes índice de texto completo varchar(max)
así como.
No puede buscar un campo de texto sin convertirlo de texto a varchar.
declare @table table (a text)
insert into @table values ('a')
insert into @table values ('a')
insert into @table values ('b')
insert into @table values ('c')
insert into @table values ('d')
select *
from @table
where a="a"
Esto da un error:
The data types text and varchar are incompatible in the equal to operator.
Donde esto no:
declare @table table (a varchar(max))
Curiosamente, LIKE
todavía funciona, es decir
where a like '%a%'