sql >> Base de Datos >  >> RDS >> Mysql

Novedades para no más varchar(255)

¿A qué "regla VARCHAR (255)" te refieres?

Cada proveedor de base de datos es libre de implementar VARCHAR como quiera. Las reglas (y pautas) para VARCHAR no serán necesariamente las mismas para todas las bases de datos.

En cuanto al estándar SQL, realmente no lo he investigado. Puede ser bastante flexible, por lo que se encuentra que todas las implementaciones de VARCHAR cumplen con el estándar. Si el estándar SQL para VARCHAR es realmente estricto, entonces los proveedores de DBMS pueden extender el estándar o simplemente no cumplirlo. No creo que el estándar real importe mucho. Lo que importa son las reglas reales aplicadas por el DBMS.

Como pauta general, especifique una longitud de VARCHAR lo suficientemente larga como para admitir los requisitos del sistema. Si el requisito del sistema es no permitir más de 200 caracteres, especificaría la longitud como VARCHAR(200) .

Como otra pauta general, no defina longitudes de VARCHAR que sean más grandes de lo necesario. Las columnas VARCHAR declaradas más largas de lo necesario pueden tener un impacto en los recursos y el rendimiento.

El límite de Oracle para la longitud de VARCHAR es de 4000 caracteres. (En versiones anteriores de Oracle, el máximo era 2000. Si necesita más de 4000 caracteres, puede usar CLOB tipo de datos.

Límite de SQL Server a VARCHAR(8000) , a menos que especifique VARCHAR(MAX) que permite un tamaño máximo (en bytes) de 2^32-1.

MySQL tiene un límite de 65.535 para el límite máximo de longitud de fila. Eso limita efectivamente el tamaño de VARCHAR a VARCHAR (21844), si se usa un conjunto de caracteres multibyte como utf8. Con un juego de caracteres de un solo byte (como latin1), el máximo sería VARCHAR(65532). Si necesita más caracteres que eso, o se encuentra con el límite de la longitud máxima de la fila, puede usar el tipo de datos TEXT en lugar de VARCHAR.

La mayoría de las implementaciones DBMS VARCHAR almacenan un campo de "longitud" para una columna VARCHAR, junto con el valor. la longitud se almacena como un número entero.

En algunos DBMS, si la longitud máxima (en bytes) de una columna VARCHAR no supera los 255 bytes, el campo de longitud se puede implementar como un entero de un solo byte. Si la columna permite más de 255 bytes, entonces el campo de longitud debe ser más grande que un solo byte.

Con formatos de fila dinámicos, en términos de almacenamiento de fila, almacenando 10 caracteres en una columna, realmente no importa si la columna se define como VARCHAR (30) o VARCHAR (1000). Con formatos de fila fijos, se reservará el espacio para la longitud máxima de la columna. El formato para el almacenamiento de filas dependerá del DBMS y, en algunos casos (MySQL), del motor de almacenamiento y del formato de fila especificado.

Sí, es 2016. Y hemos recorrido un largo camino desde la introducción del primer sistema de base de datos relacional comercial.

La base de datos es sólo una parte del sistema. Puede haber límites en la aplicación u otros componentes de software. (Si la aplicación está escrita en C, y la aplicación está definiendo una estructura con una matriz de bytes para el campo, el límite en el tamaño será importante. Aumentar el tamaño permitido en la base de datos no arreglará automáticamente la aplicación .

También podría haber límites/restricciones de longitud en el código Javascript o en los elementos HTML de una página web. O puede haber limitaciones de otros componentes de software. Por ejemplo, algunos de los controladores ODBC de SQL Server realmente antiguos tienen un límite de 255 caracteres (¿bytes?) para las columnas CHAR y VARCHAR.

Entonces, la longitud de un VARCHAR en la base de datos es solo una parte de la historia.

Con todo eso dicho, todavía no tengo claro a qué te refieres cuando preguntas

¿Podemos romper la regla VARCHAR(255)?

Me pregunto a qué "regla" te refieres. En la mayoría de las bases de datos que conozco, es posible definir columnas VARCHAR mucho más largas que 255 bytes o 255 caracteres. Y hacer eso no rompe ninguna regla.