Задавайте вопросы, мы ответим
Вы не зашли.
mysql 5.0.18
CREATE TABLE `t10` ( `id` int(11) NOT NULL auto_increment, `value` char(1) default NULL, PRIMARY KEY (`id`), UNIQUE KEY `value` (`value`) ) ENGINE=MyISAM DEFAULT CHARSET=cp1251 ALTER TABLE `t10` MODIFY `value` CHAR(0) NOT NULL
--> The used storage engine can't index column 'value'
Неактивен
Вроде нормальное поведение - индекс не может быть на колонке нулевой длины.
Другой пример:
mysql> ALTER TABLE `t10` MODIFY `value` VARCHAR(10000) NOT NULL; Query OK, 2 rows affected, 1 warning (0.00 sec) Records: 2 Duplicates: 0 Warnings: 0 mysql> show warnings; +---------+------+----------------------------------------------------------+ | Level | Code | Message | +---------+------+----------------------------------------------------------+ | Warning | 1071 | Specified key was too long; max key length is 1000 bytes | +---------+------+----------------------------------------------------------+ 1 row in set (0.00 sec) mysql> show create table t10\G *************************** 1. row *************************** Table: t10 Create Table: CREATE TABLE `t10` ( `id` int(11) NOT NULL auto_increment, `value` varchar(10000) NOT NULL, PRIMARY KEY (`id`), KEY `value` (`value`(1000)) ) ENGINE=MyISAM DEFAULT CHARSET=cp1251 1 row in set (0.00 sec)
В этом случае, ограничение сервер обошел сам и сгенерил warning.
Неактивен
Понял, спасибо, значит не бага
хотя мне это поведение все таки кажется странным. Более логичным было бы просто не создавать индекс, хотя...
Если я сделаю не char(0), а например varchar(1), оставив колонку таки пустой - то это неприятностей не вызовет, и индекс создастся, хотя и по все той же нулевой-длины колонке.
Отредактированно Shopen (31.10.2007 01:22:45)
Неактивен
А могу я узнать практическую ценность колонки CHAR(0)?
Неактивен
paulus написал:
А могу я узнать практическую ценность колонки CHAR(0)?
Конечно
автоматический разбор таблицы и сжатие ее типов.
т.е. я смотрю на максимальную длину строки в колонке и делаю ее alter table char/varchar(max_length)
а колонка возьми и окажись пустой. Т.е. в принципе конкретно это исключение можно обработать, но чем меньше исключений - тем проще логика
может какие то более интересные решения есть?
Неактивен
По-моему, достаточно бесполезная колонка
Хорошее сжатие типов должно подразумевать выкидывание колонки в принципе,
если в ней нет данных
Неактивен
paulus написал:
По-моему, достаточно бесполезная колонка
Хорошее сжатие типов должно подразумевать выкидывание колонки в принципе,
если в ней нет данных
Ну это в идеале. Я согласен.
Хитрость в том что есть задача, описанная здесь - http://sqlinfo.ru/forum/viewtopic.php?id=209
В рамках задачи СТРУКТУРА должна оставаться неизменной. То есть крайне высока вероятность того, что софт рассчитывает на существование колонки, даже если она не несет информации. В данный момент, а завтра там эта информация может появится.
Соответственно просто отрезать ее нельзя. я бы и рад, но в общем случае - нельзя.
Я так понимаю остается только varchar(1) unique key из оптимального
Неактивен