Gereğince çevrimiçi dokümanlar , bir 64K satır sınırı vardır ve siz kullanarak satır boyutunu çalışabilir:
row length = 1
+ (sum of column lengths)
+ (number of NULL columns + delete_flag + 7)/8
+ (number of variable-length columns)
Sütun uzunluklarının boyutlarının bire bir eşleşmesi olmadığını unutmayın. Örneğin, CHAR(10) CHARACTER SET utf8
belirli bir kodlamanın karakter başına üç bayt başına özelliğini hesaba katması gerektiğinden, on karakterin her biri için üç bayt gerektirir utf8
(bu, en fazla dört bayta sahip olabilen "gerçek" UTF-8 yerine MySQL'in utf8
kodlamasıdır. ).
Ancak, satır boyutunuz 64K'ya yaklaşıyorsa, veritabanınızın şemasını incelemek isteyebilirsiniz. Düzgün ayarlanmış (3NF) bir veritabanında bu kadar geniş olması gereken nadir bir tablodur - mümkündür, çok yaygın değildir.
Bundan daha fazlasını kullanmak isterseniz, BLOB
veya TEXT
türlerini kullanabilirsiniz . Bunlar satırın 64K sınırına dahil değildir (küçük bir yönetimsel ayak izi dışında), ancak kullanımlarından kaynaklanan, metin bloğunun tamamını belirli bir sayının ötesinde sıralayamamak gibi diğer sorunların farkında olmanız gerekir. (bu, yukarı doğru yapılandırılabilir), geçici tabloları bellekte değil diskte olmaya zorlamak veya boyutları ve verimli iletişim için arabellekleri yapılandırmak zorunda kalmaktır.
İzin verilen boyutlar:
TINYTEXT 255 (+1 byte overhead)
TEXT 64K - 1 (+2 bytes overhead)
MEDIUMTEXT 16M - 1 (+3 bytes overhead)
LONGTEXT 4G - 1 (+4 bytes overhead)
Hala bayt / karakter uyumsuzluğu var (böylece bir MEDIUMTEXT utf8
sütun "sadece" yaklaşık yarım milyon karakter depolayabilir (16M-1)/3 = 5,592,405
), ancak yine de aralığınızı büyük ölçüde genişletir.