Согласно онлайн-документам , существует ограничение в 64 КБ, и вы можете определить размер строки, используя:
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
(это кодировка MySQL,utf8
а не «настоящий» UTF-8, который может иметь до четырех байтов). ).
Но, если ваш размер строки приближается к 64 КБ, вы можете изучить схему вашей базы данных. Это редкая таблица, которая должна быть настолько широкой в правильно настроенной (3NF) базе данных - это возможно, но не очень часто.
Если вы хотите использовать больше, вы можете использовать BLOB
или TEXT
. Они не учитываются при ограничении строки в 64 КБ (кроме небольшого административного следа), но вам необходимо знать о других проблемах, связанных с их использованием, таких как невозможность сортировки с использованием всего текстового блока за пределами определенного числа. символов (хотя это может быть настроено вверх), заставляя временные таблицы быть на диске, а не в памяти, или настраивая буферы связи клиента и сервера для эффективной обработки размеров.
Допустимые размеры:
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
), но это все равно значительно расширяет ваш диапазон.