Відповідно до онлайнових документів , існує обмеження рядка 64K, і ви можете опрацювати розмір рядка, використовуючи:
row length = 1
+ (sum of column lengths)
+ (number of NULL columns + delete_flag + 7)/8
+ (number of variable-length columns)
Потрібно пам’ятати, що довжини стовпців не є відображенням розміру один на один. Наприклад, CHAR(10) CHARACTER SET utf8
потрібно три байти на кожен з десяти символів, оскільки саме таке кодування має враховувати властивість трьох байтів на символ utf8
( це utf8
кодування MySQL, а не "реальний" UTF-8, який може мати до чотирьох байт ).
Але якщо розмір вашого рядка наближається до 64 К, ви можете вивчити схему вашої бази даних. Це рідкісна таблиця, яка повинна бути такою широкою в правильно налаштованій (3NF) базі даних - це можливо, просто не дуже часто.
Якщо ви хочете використовувати більше, ви можете використовувати типи BLOB
або TEXT
. Вони не враховуються до 64K межі рядка (крім невеликого адміністративного сліду), але вам потрібно знати про інші проблеми, що виникають внаслідок їх використання, наприклад, не в змозі сортувати за допомогою всього текстового блоку понад певну кількість символів (хоча це можна налаштувати вгору), змушуючи тимчасові таблиці знаходитись на диску, а не в пам'яті, або потребувати налаштування клієнтських та серверних буферів для ефективної обробки розмірів.
Дозволені розміри:
TINYTEXT 255 (+1 byte overhead)
TEXT 64K - 1 (+2 bytes overhead)
MEDIUMTEXT 16M - 1 (+3 bytes overhead)
LONGTEXT 4G - 1 (+4 bytes overhead)
У вас все ще є невідповідність байт / символів (так що MEDIUMTEXT utf8
стовпець може зберігати "лише" близько півмільйона символів (16M-1)/3 = 5,592,405
), але він все ще значно розширює ваш діапазон.