Qual è l'equivalente di varchar (max) in MySQL?
Qual è l'equivalente di varchar (max) in MySQL?
Risposte:
La lunghezza massima di un varchar è soggetta alla dimensione massima della riga in MySQL, che è 64 KB (senza contare i BLOB):
VARCHAR(65535)
Tuttavia, si noti che il limite è inferiore se si utilizza un set di caratteri multi-byte:
VARCHAR(21844) CHARACTER SET utf8
Ecco alcuni esempi:
La dimensione massima della riga è 65535, ma un varchar include anche un byte o due per codificare la lunghezza di una determinata stringa. Quindi in realtà non puoi dichiarare un varchar della dimensione massima della riga, anche se è l'unica colonna nella tabella.
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
Ma se proviamo a ridurre le lunghezze, troviamo la massima lunghezza che funziona:
mysql> CREATE TABLE foo ( v VARCHAR(65532) );
Query OK, 0 rows affected (0.01 sec)
Ora se proviamo a usare un set di caratteri multibyte a livello di tabella, scopriamo che conta ogni carattere come più byte. Le stringhe UTF8 non utilizzano necessariamente più byte per stringa, ma MySQL non può presumere che limiterai tutti i tuoi futuri inserimenti a caratteri a byte singolo.
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
Nonostante ciò che ci ha detto l'ultimo errore, InnoDB non ama ancora una lunghezza di 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
Questo ha perfettamente senso, se si calcola che 21845 * 3 = 65535, che non avrebbe funzionato comunque. Considerando 21844 * 3 = 65532, che funziona.
mysql> CREATE TABLE foo ( v VARCHAR(21844) ) CHARSET=utf8;
Query OK, 0 rows affected (0.32 sec)
DEFAULT
valore per la colonna. Non è possibile farlo con i tipi TEXT o BLOB.
TEXT
limite di lunghezza è 64 KB. MEDIUMTEXT
il limite di lunghezza è 16 M. LONGTEXT
il limite di lunghezza è 4G.
varchar(max)
tipo di colonna del server SQL .
TLDR; MySql non ha un concetto equivalente di varchar(max)
, questa è una funzionalità di MS SQL Server.
varchar(max)
è una funzionalità di Microsoft SQL Server.
La quantità di dati che una colonna potrebbe archiviare nelle versioni del server Microsoft SQL precedenti alla versione 2005 era limitata a 8 KB. Per archiviare più di 8 KB dovresti usare TEXT
, NTEXT
o BLOB
tipi di colonne, questi tipi di colonne memorizzavano i loro dati come una raccolta di pagine da 8 KB separate dalle pagine di dati della tabella; hanno supportato l'archiviazione fino a 2 GB per riga.
Il grande avvertimento per questi tipi di colonna era che di solito richiedevano funzioni e istruzioni speciali per accedere e modificare i dati (ad es READTEXT
. WRITETEXT
, E UPDATETEXT
)
In SQL Server 2005 è varchar(max)
stato introdotto per unificare i dati e le query utilizzate per recuperare e modificare i dati in colonne di grandi dimensioni. I dati per le varchar(max)
colonne sono memorizzati in linea con le pagine dei dati della tabella.
Poiché i dati nella colonna MAX riempiono una pagina di dati da 8 KB, viene allocata una pagina di overflow e la pagina precedente punta ad essa formando un elenco collegato. A differenza di TEXT
, NTEXT
e BLOB
il varchar(max)
tipo di colonna supporta la stessa semantica di query degli altri tipi di colonna.
Quindi varchar(MAX)
significa davvero varchar(AS_MUCH_AS_I_WANT_TO_STUFF_IN_HERE_JUST_KEEP_GROWING)
e non varchar(MAX_SIZE_OF_A_COLUMN)
.
Per ottenere la stessa quantità di spazio di archiviazione varchar(max)
in MySql, dovrai comunque ricorrere a un BLOB
tipo di colonna. Questo articolo illustra un metodo molto efficace per archiviare in modo efficiente grandi quantità di dati in MySql.
varchar(max)
veramente .
La lunghezza massima di un varchar è
65535
diviso per la lunghezza massima in byte di un carattere nel set di caratteri su cui è impostata la colonna (es. utf8 = 3 byte, ucs2 = 2, latin1 = 1).
meno 2 byte per memorizzare la lunghezza
meno la lunghezza di tutte le altre colonne
meno 1 byte per ogni 8 colonne che sono nullable. Se la colonna è nulla / non nulla, questa viene memorizzata come un bit in un byte / byte chiamato maschera null, 1 bit per colonna che è nullable.
modifica tabella prg_ar_report_colors aggiungi Text_Color_Code VARCHAR (max);
alter table prg_ar_report_colors aggiungi Text_Color_Code longtext;
alter table prg_ar_report_colors aggiungi Text_Color_Code CLOB;
Mysql Conversione delle colonne da VARCHAR a TEXT quando le dimensioni sono limitate !!!
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>