Pergunta

O que é o equivalente a varchar (max) no MySQL?

Foi útil?

Solução

O comprimento máximo de um VARCHAR é sujeito ao tamanho de linha máximo no MySQL, que é 64 KB (não contando BLOBs):

VARCHAR(65535)

No entanto, nota que o limite é menor se você usar um conjunto de caracteres multi-byte:

VARCHAR(21844) CHARACTER SET utf8

Aqui estão alguns exemplos:

O tamanho máximo de linha é 65535, mas um VARCHAR também inclui um byte ou dois para codificar o comprimento de uma dada cadeia. Então, você realmente não pode declarar um varchar do tamanho máximo de linha, mesmo se for a única coluna na tabela.

mysql> CREATE TABLE foo ( v VARCHAR(65534) );
ERROR 1118 (42000): Row size too large. The maximum row size for the used table type, not counting BLOBs, is 65535. This includes storage overhead, check the manual. You have to change some columns to TEXT or BLOBs

Mas se tentarmos comprimentos decrescentes, encontramos o maior comprimento que as obras:

mysql> CREATE TABLE foo ( v VARCHAR(65532) );
Query OK, 0 rows affected (0.01 sec)

Agora, se tentar usar um conjunto de caracteres multibyte no nível de tabela, vemos que ele conta cada personagem como vários bytes. cordas UTF8 não necessariamente usar vários bytes por corda, mas o MySQL não pode assumir que você vai restringir todas as suas futuras inserções para caracteres de byte único.

mysql> CREATE TABLE foo ( v VARCHAR(65532) ) CHARSET=utf8;
ERROR 1074 (42000): Column length too big for column 'v' (max = 21845); use BLOB or TEXT instead

Apesar do que o último erro nos disse, InnoDB ainda não gosta de um comprimento de 21845.

mysql> CREATE TABLE foo ( v VARCHAR(21845) ) CHARSET=utf8;
ERROR 1118 (42000): Row size too large. The maximum row size for the used table type, not counting BLOBs, is 65535. This includes storage overhead, check the manual. You have to change some columns to TEXT or BLOBs

Isso faz sentido, se você calcular que 21845 * 3 = 65535, que não teria funcionado de qualquer maneira. Considerando 21844 * 3 = 65532, que não funciona.

mysql> CREATE TABLE foo ( v VARCHAR(21844) ) CHARSET=utf8;
Query OK, 0 rows affected (0.32 sec)

Outras dicas

O que é VARCHAR (max)?

varchar(max) é um recurso do Microsoft SQL Server.

A quantidade de dados que uma coluna pode armazenar em versões do Microsoft SQL Server anteriores à versão 2005, foi limitado a 8 KB. A fim de armazenar mais de 8 KB que você teria de uso TEXT, NTEXT, ou BLOB tipos colunas, estes tipos de colunas armazenados os seus dados como uma coleção de 8K páginas separadas das páginas de dados da tabela; eles apoiaram armazenar até 2GB por linha.

O grande limitação para estes tipos de coluna foi que eles geralmente necessária funções especiais e instruções para aceder e modificar os dados (por exemplo READTEXT, WRITETEXT, e UPDATETEXT)

No SQL Server 2005, varchar(max) foi introduzido para unificar os dados e consultas usadas para recuperar e modificar dados em grandes colunas. Os dados para colunas varchar(max) é armazenada em linha com as páginas de dados da tabela.

Como os dados na coluna MAX preenche uma página de dados de 8 KB de uma página estouro é alocada e os anteriores pontos página a ele formando uma lista ligada. Ao contrário TEXT, NTEXT, e BLOB o tipo de coluna varchar(max) suporta todos os mesmos semântica da consulta como outros tipos de colunas.

Assim varchar(MAX) realmente significa varchar(AS_MUCH_AS_I_WANT_TO_STUFF_IN_HERE_JUST_KEEP_GROWING) e não varchar(MAX_SIZE_OF_A_COLUMN).

MySql não tem uma expressão equivalente.

A fim de obter a mesma quantidade de armazenamento como um varchar(max) em MySql você ainda precisa de recorrer a um tipo de coluna BLOB. Este artigo discute um método muito eficiente de armazenar grandes quantidades de dados de forma eficiente em MySQL.

O comprimento máximo de um varchar é

65535

dividido pelo comprimento máxima de bytes de um carácter no conjunto de caracteres da coluna é definida como (por exemplo, UTF-8 = 3 bytes, ucs2 = 2, latin1 = 1).

menos 2 bytes para armazenar o comprimento

menos o comprimento de todas as outras colunas

menos 1 byte para cada 8 colunas que são anulável. Se sua coluna é nulo / não nulo este fica armazenado como um bit em um byte / bytes chamado a máscara nulo, 1 bit por coluna que é anulável.

Para o SQL Server

prg_ar_report_colors ALTER TABLE adicionar Text_Color_Code VARCHAR (max);

Para o MySQL

prg_ar_report_colors ALTER TABLE adicionar Text_Color_Code longtext;

Para o Oracle

prg_ar_report_colors ALTER TABLE adicionar Text_Color_Code CLOB;

Mysql Converter coluna de VARCHAR para TEXT quando sob o tamanho limite !!!

mysql> CREATE TABLE varchars1(ch3 varchar(6),ch1 varchar(3),ch varchar(4000000))
;
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> SHOW WARNINGS;
+-------+------+---------------------------------------------+
| Level | Code | Message                                     |
+-------+------+---------------------------------------------+
| Note  | 1246 | Converting column 'ch' from VARCHAR to TEXT |
+-------+------+---------------------------------------------+
1 row in set (0.00 sec)

mysql>

O comprimento máximo de um VARCHAR no MySQL 5.6.12 é 4294967295.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top