SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 02.10.2009 13:52:59

IGV
Участник
Зарегистрирован: 27.08.2009
Сообщений: 17

Максимально длинное поле типа VARCHAR

Хочу создать поле в которое будет писаться лог(он может быть как маленького размера, так и очень большого), но я не хочу задавать его максимальный размер.
Я прочитал, что максимальный размер VARCHAR(65535) для MySQL версии от 5.0.3
http://dev.mysql.com/doc/refman/5.0/en/char.html

Как не задавать количество символов? Или в этом случае нужно писать VARCHAR(65535)? Или каким другим типом данных воспользоваться?

Неактивен

 

#2 02.10.2009 14:37:12

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Максимально длинное поле типа VARCHAR

А почему вы не хотите указать максимальный размер?

VARCHAR(65535) это почти тоже, что и TEXT. Разница лишь в том, что TEXT всегда использует 2 байта для хранения длины, а VARCHAR в случае если величина меньше 255 символов 1 байт.

Неактивен

 

#3 02.10.2009 14:45:14

IGV
Участник
Зарегистрирован: 27.08.2009
Сообщений: 17

Re: Максимально длинное поле типа VARCHAR

я просто думал, что можно по умолчанию взять какой-то тип, чтобы он сам решал какой размер у тестового поля и вообще не париться.

Неактивен

 

#4 02.10.2009 15:04:11

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Максимально длинное поле типа VARCHAR

Тип в принципе не может решать какой размер у текстового поля. Каждый строковый тип имеет ограничения по длинне, кроме того им требуется разное кол-во байт для хранения значений.
Все небинарные строковые типы (кроме CHAR), имеют переменную длинну, т.е. есть они хранят непосредственно само значение плюс длинну данных. Цифры в скобках после VARCHAR указывают лишь максимально допустимую длинну данных для вашей колонки.

Неактивен

 

#5 02.10.2009 15:35:09

IGV
Участник
Зарегистрирован: 27.08.2009
Сообщений: 17

Re: Максимально длинное поле типа 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

Неактивен

 

#6 02.10.2009 16:50:18

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Максимально длинное поле типа VARCHAR

Забыл указать в различиях 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

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson