Secondo i documenti online , esiste un limite di riga di 64 KB ed è possibile calcolare la dimensione della riga utilizzando:
row length = 1
+ (sum of column lengths)
+ (number of NULL columns + delete_flag + 7)/8
+ (number of variable-length columns)
Devi tenere presente che le lunghezze delle colonne non sono un mapping uno a uno delle loro dimensioni. Ad esempio, CHAR(10) CHARACTER SET utf8
richiede tre byte per ciascuno dei dieci caratteri poiché quella particolare codifica deve tenere conto della proprietà di tre byte per carattere di utf8
(ovvero la utf8
codifica di MySQL piuttosto che "UTF-8" reale, che può avere fino a quattro byte ).
Tuttavia, se la dimensione della riga si avvicina a 64 KB, è possibile esaminare lo schema del database. È una tabella rara che deve essere così ampia in un database correttamente impostato (3NF) - è possibile, ma non molto comune.
Se si desidera utilizzare più di quello, è possibile utilizzare i tipi BLOB
o TEXT
. Questi non vengono conteggiati rispetto al limite di 64 KB della riga (diverso da un footprint amministrativo ridotto) ma è necessario essere consapevoli di altri problemi derivanti dal loro utilizzo, come non essere in grado di ordinare utilizzando l'intero blocco di testo oltre un certo numero di caratteri (anche se questo può essere configurato verso l'alto), forzando le tabelle temporanee su disco anziché in memoria, o dover configurare i buffer di comunicazione client e server per gestire le dimensioni in modo efficiente.
Le dimensioni consentite sono:
TINYTEXT 255 (+1 byte overhead)
TEXT 64K - 1 (+2 bytes overhead)
MEDIUMTEXT 16M - 1 (+3 bytes overhead)
LONGTEXT 4G - 1 (+4 bytes overhead)
Hai ancora la mancata corrispondenza byte / carattere (in modo che una MEDIUMTEXT utf8
colonna possa memorizzare "solo" circa mezzo milione di caratteri (16M-1)/3 = 5,592,405
) , ma espande ancora notevolmente il tuo intervallo.