Respondiendo: parece que el texto está obsoleto en muchos DBMS, así que mejor usar un blob o un varchar con un límite alto (y con blob no tendréis problemas de codificación, lo cual es una gran molestia varchar y texto).
También como se indica en this thread at the MySQL forums, los discos duros son más baratos que el software, por lo que es mejor que primero diseñe su software y lo haga funcionar, y solo entonces si el espacio se convierte en un problema, es posible que desee optimizar ese aspecto. Por lo tanto, no intente sobreimperimentar el tamaño de su columna demasiado pronto, mejor configure el tamaño más grande al principio (además, esto evitará problemas de seguridad).
Acerca de los diversos comentarios: Demasiado fanatismo SQL aquí. A pesar de que soy muy aficionado a SQL y modelos relacionales, también tienen sus dificultades.
Almacenamiento de datos serializados en la base de datos tal como está (tales como el almacenamiento de JSON o datos XML con formato) tiene algunas ventajas:
- Usted puede tener un formato más flexible para sus datos: añadir y eliminar campos en la mosca, cambiando la especificación de los campos sobre la marcha, etc.
- Menor desajuste de impedancia con el modelo de objetos: almacena y recupera los datos tal como están en su programa, en comparación con recuperar los datos y luego tener que procesarlo y convertirlo entre las estructuras de los objetos de tu programa y las estructuras de tu base de datos relacional.
Y hay muchas más otras ventajas, así que por favor no fanboyismo: las bases de datos relacionales son una gran herramienta, pero no vamos a compartir las otras herramientas que podemos obtener.Más herramientas, mejor.
En cuanto a un ejemplo concreto de uso, tiendo a agregar un campo JSON en mi base de datos para almacenar parámetros extra de un registro donde las columnas (propiedades) de los datos JSON nunca serán SELECCIONADAS individualmente, pero solo usadas cuando el registro correcto ya está seleccionado. En este caso, aún puedo discriminar mis registros con las columnas relacionales, y cuando se selecciona el registro correcto, puedo usar los parámetros adicionales para el propósito que desee.
Así que mi consejo para conservar lo mejor de ambos (velocidad, serializabilidad y flexibilidad estructural), basta con usar algunas columnas relacionales estándar para servir como claves únicas para discriminar entre las filas, y luego usar una columna blob/varchar donde sus datos seriados serán insertados. Por lo general, solo se requieren dos/tres columnas para una clave única, por lo tanto, esto no será una sobrecarga importante.
Además, usted puede estar interesado por PostgreSQL que ahora tiene un tipo de datos JSON, y PostSQL project para procesar directamente los campos JSON como columnas relacionales.
No se usan datos serializados. –
Supongo que normalmente no debería usarlo. Este es un caso especial en el que realmente tiene sentido. – djburdick