Задавайте вопросы, мы ответим
Вы не зашли.
Хочу создать поле в которое будет писаться лог(он может быть как маленького размера, так и очень большого), но я не хочу задавать его максимальный размер.
Я прочитал, что максимальный размер VARCHAR(65535) для MySQL версии от 5.0.3
http://dev.mysql.com/doc/refman/5.0/en/char.html
Как не задавать количество символов? Или в этом случае нужно писать VARCHAR(65535)? Или каким другим типом данных воспользоваться?
Неактивен
А почему вы не хотите указать максимальный размер?
VARCHAR(65535) это почти тоже, что и TEXT. Разница лишь в том, что TEXT всегда использует 2 байта для хранения длины, а VARCHAR в случае если величина меньше 255 символов 1 байт.
Неактивен
я просто думал, что можно по умолчанию взять какой-то тип, чтобы он сам решал какой размер у тестового поля и вообще не париться.
Неактивен
Тип в принципе не может решать какой размер у текстового поля. Каждый строковый тип имеет ограничения по длинне, кроме того им требуется разное кол-во байт для хранения значений.
Все небинарные строковые типы (кроме CHAR), имеют переменную длинну, т.е. есть они хранят непосредственно само значение плюс длинну данных. Цифры в скобках после VARCHAR указывают лишь максимально допустимую длинну данных для вашей колонки.
Неактивен
Сейчас выяснил, что общий размер не может быть больше 65535.
Although InnoDB supports row sizes larger than 65535 internally, you cannot define a row containing VARBINARY or VARCHAR columns with a combined size larger than 65535:
mysql> CREATE TABLE t (a VARCHAR(8000), b VARCHAR(10000),
-> c VARCHAR(10000), d VARCHAR(10000), e VARCHAR(10000),
-> f VARCHAR(10000), g VARCHAR(10000)) ENGINE=InnoDB;
ERROR 1118 (42000): Row size too large. The maximum row size for the
used table type, not counting BLOBs, is 65535. You have to change some
columns to TEXT or BLOBs
Неактивен
Забыл указать в различиях VARCHAR и TEXT:
1) TEXT не может иметь дефолтного значения
2) при создании индекса на колонку TEXT необходимо указать длинну ключа. Если у вас VARCHAR(65535) и вы добавляете индекс, то он ругнется (выдав предупреждение) но ключ создаст, самостоятельно установив ограничение длинны, а в случае колонки типа TEXT пошлет, т.е. выдаст error.
IGV написал:
Сейчас выяснил, что общий размер не может быть больше 65535.
Да, есть такое
http://dev.mysql.com/doc/refman/5.0/en/char.html
The effective maximum length of a VARCHAR in MySQL 5.0.3 and later is subject to the maximum row size (65,535 bytes, which is shared among all columns) and the character set used.
Но самое забавное, что если вы добавите колонки типа TEXT, то данные о длинне этих колонок тоже пойдут в указаную цифру 65,535. Это нечто новое. Хотя скорее просто бага.
Однако. Если добавить численную колонку, то данные о её длинне тоже пойдут в указанную цифру.
Проверено на :
5.0.51a-community
и
5.1.21-beta-community-log
Неактивен