Qual é o equivalente a varchar (max) no MySQL?
Qual é o equivalente a varchar (max) no MySQL?
Respostas:
O comprimento máximo de um varchar está sujeito ao tamanho máximo da linha no MySQL, que é de 64 KB (sem contar os BLOBs):
VARCHAR(65535)
No entanto, observe que o limite é menor se você usar um conjunto de caracteres de vários bytes:
VARCHAR(21844) CHARACTER SET utf8
aqui estão alguns exemplos:
O tamanho máximo da linha é 65535, mas um varchar também inclui um byte ou dois para codificar o comprimento de uma determinada sequência. Portanto, você realmente não pode declarar um varchar do tamanho máximo da linha, mesmo que seja 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 diminuir comprimentos, encontraremos o maior comprimento que funciona:
mysql> CREATE TABLE foo ( v VARCHAR(65532) );
Query OK, 0 rows affected (0.01 sec)
Agora, se tentarmos usar um conjunto de caracteres multibyte no nível da tabela, descobrimos que ele conta cada caractere como vários bytes. As strings UTF8 não usam necessariamente vários bytes por string, mas o MySQL não pode assumir que você restringirá todas as suas inserções futuras a 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, o 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 todo o sentido, se você calcular 21845 * 3 = 65535, o que não teria funcionado de qualquer maneira. Considerando 21844 * 3 = 65532, o que funciona.
mysql> CREATE TABLE foo ( v VARCHAR(21844) ) CHARSET=utf8;
Query OK, 0 rows affected (0.32 sec)
DEFAULT
valor para a coluna. Não é possível fazer isso com os tipos TEXT ou BLOB.
TEXT
limite de comprimento é de 64 K. MEDIUMTEXT
limite de comprimento é 16M. LONGTEXT
limite de comprimento é 4G.
varchar(max)
tipo de coluna do Sql Server .
TLDR; O MySql não possui um conceito equivalente varchar(max)
, este é um recurso do MS SQL Server.
varchar(max)
é um recurso do Microsoft SQL Server.
A quantidade de dados que uma coluna poderia armazenar nas versões do Microsoft SQL Server anteriores à versão 2005 era limitada a 8 KB. Para armazenar mais de 8 KB, você teria que usar TEXT
, NTEXT
ou BLOB
tipos de colunas, esses tipos de colunas armazenavam seus dados como uma coleção de 8K páginas separadas das páginas de dados da tabela; eles suportaram o armazenamento de até 2 GB por linha.
A grande limitação a estes tipos de colunas foi que eles geralmente necessária funções especiais e declarações de acessar e modificar os dados (por exemplo READTEXT
, WRITETEXT
e UPDATETEXT
)
No SQL Server 2005, varchar(max)
foi introduzido para unificar os dados e as consultas usadas para recuperar e modificar dados em colunas grandes. Os dados para varchar(max)
colunas são armazenados em linha com as páginas de dados da tabela.
Como os dados na coluna MAX preenchem uma página de dados de 8 KB, uma página excedente é alocada e a página anterior aponta para ela, formando uma lista vinculada. Ao contrário TEXT
, NTEXT
e BLOB
o varchar(max)
tipo de coluna suporta todos os mesmos semântica da consulta como outros tipos de colunas.
Então, 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)
.
Para obter a mesma quantidade de armazenamento que varchar(max)
no MySql, você ainda precisará recorrer a um BLOB
tipo de coluna. Este artigo discute um método muito eficaz de armazenar grandes quantidades de dados no MySql com eficiência.
varchar(max)
realmente significa.
O comprimento máximo de um varchar é
65535
dividido pelo comprimento máximo de bytes de um caractere no conjunto de caracteres em que a coluna está definida (por exemplo, utf8 = 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áveis. Se sua coluna for nula / não nula, isso será armazenado como um bit em um byte / bytes chamado máscara nula, 1 bit por coluna que é anulável.
alterar tabela prg_ar_report_colors add Text_Color_Code VARCHAR (max);
alterar tabela prg_ar_report_colors add Text_Color_Code longtext;
alterar tabela prg_ar_report_colors adicionar Text_Color_Code CLOB;
Mysql Convertendo coluna de VARCHAR para TEXT quando estiver abaixo do 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>