Я хотел бы знать, каков максимальный размер для типа MySQL VARCHAR.
Я читал, что максимальный размер ограничен размером строки, который составляет около 65 КБ. Я попытался установить поле на «varchar (20000)», но там написано, что оно слишком большое.
Я мог бы установить его на «варчар (10000)». Какой точный максимум я могу установить?
Имейте в виду, что MySQL имеет максимальный предел размера строки
Внутреннее представление таблицы MySQL имеет максимальный предел размера строки в 65 535 байт, не считая типов BLOB и TEXT. Столбцы BLOB и TEXT вносят только 9-12 байт в ограничение размера строки, поскольку их содержимое хранится отдельно от остальной части строки. Узнайте больше о Пределы количества столбцов таблицы и размера строк.
Максимальный размер, который может занимать один столбец, отличается до и после MySQL 5.0.3
Значения в столбцах VARCHAR являются строками переменной длины. Длина может быть указана как значение от 0 до 255 до MySQL 5.0.3 и от 0 до 65,535 в 5.0.3 и более поздних версиях. Эффективная максимальная длина VARCHAR в MySQL 5.0.3 и более поздних версиях зависит от максимального размера строки (65 535 байт, который является общим для всех столбцов) и используемого набора символов.
Тем не менее, обратите внимание, что ограничение ниже, если вы используете многобайтовый набор символов, такой как utf8 или utf8mb4.
Используйте TEXT
inorder, чтобы преодолеть ограничение размера строки.
Четыре типа TEXT: TINYTEXT, TEXT, MEDIUMTEXT и LONGTEXT. Они соответствуют четырем типам BLOB и имеют одинаковые максимальные длины и требования к хранению.
Более подробная информация о типах BLOB и TEXT
Еще больше
Проверьте более подробную информацию о Требованиях к хранению типов данных, которые касаются требований к хранилищу для всех типов данных.
Согласно онлайн-документам, существует ограничение строки 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» в три байта на символ (то есть MySQL's utf8
кодировка, а не «настоящий» 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
), но он все еще значительно расширяет ваш диапазон.
Максимальная длина varchar зависит от максимального размера строки в MySQL что составляет 64 КБ (не считая BLOB):
VARCHAR (65535) Однако обратите внимание, что предел ниже, если вы используете многобайтовый набор символов:
VARCHAR (21844) CHARACTER SET utf8
Из документации MySQL:
Эффективная максимальная длина VARCHAR в MySQL 5.0.3 и более поздних версиях с учетом максимального размера строки (65 535 байт, который является общим для все столбцы) и используемый набор символов. Например, символы utf8 может потребоваться до трех байтов на символ, так что столбец VARCHAR это использование набора символов utf8 может быть объявлено максимум 21 844 персонажи.
Пределы для VARCHAR варьируются в зависимости от используемой кодировки. Использование ASCII будет использовать 1 байт на символ. То есть вы можете хранить 65 535 символов. Использование utf8 будет использовать 3 байта на символ, что приведет к пределу символов 21 844. НО, если вы используете современный мультибайтовый charset utf8mb4, который вы должны использовать! Поддерживает смайлики и другие специальные персонажи. Он будет использовать 4 байта на символ. Это ограничит количество символов в таблице до 16 383. Обратите внимание, что другие поля, такие как INT, также будут учитываться в этих пределах.
Вывод:
utf8 максимум 21 844 символов
utf8mb4 максимум 16 383 символов
Вы также можете использовать MEDIUMBLOB / LONGBLOB или MEDIUMTEXT / LONGTEXT
Тип BLOB в MySQL может хранить до 65 534 байт, если вы попытаетесь сохранить больше, чем это много данных, MySQL усечет данные. MEDIUMBLOB может хранить до 16 777 213 байт, а LONGBLOB - до 4 294 967 292 байт.
До версии Mysql 5.0.3 в виде данных Varchar можно хранить 255 символов, но из 5.0.3 можно хранить 65 535 символов.
НО имеет ограничение максимального размера строки 65 535 байт. Это означает, что, включая все столбцы, он не должен превышать 65 535 байт.
В вашем случае может случиться так, что при попытке установить более 10000 он превышает 65 535, и mysql выдает ошибку.
Для получения дополнительной информации: https://dev.mysql.com/doc/refman/5.0/en/column-count-limit.html
блог с примером: http://goo.gl/Hli6G3
Вы можете использовать TEXT
type, который не ограничен 64 КБ