Общие > Базы данных

CREATE TABLE и ENUM (глюки!)

(1/3) > >>

Forza:
Здравствуйте.
В настоящий момент начинаю изучение MySQL по книге Дюбуа "Применение MySQL и Perl в Web-приложениях" (ранее приходилось немного работать с Oracle, т.е. в базах не новичок).
На 62-й странице книги предлагают создать таблицу:

CREATE TABLE todo
(
t DATETIME NOT NULL,
content VARCHAR(255) NOT NULL,
status ENUM(\'не выполнено\',\'выполнено\', \'выполняется\') NOT NULL,
INDEX (t)
);

Таблица создаётся, мягко говоря, странно: при просмотре её с помощью WinMySQLadmin видно, что первые 2 столбца (t, content) на самом деле безымянные, т.е. к ним никак из запросов не обратиться.
Если же создавать эту таблицу без поля status (тип ENUM) или присвоить ему тип VARCHAR, то всё создаётся нормально - все столбцы с именами.

Это имеет место в обеих версиях MySQL, которые выложены на http://www.mysql.ru - и в 3.23.56, и в 4.0.12.

Макс:
Forza
наверняка это глюк WinMysqlAdmin. Найди какой-нибудь другой клиент для mysql

Forza:

--- Цитировать ---Макс:
наверняка это глюк WinMysqlAdmin. Найди какой-нибудь другой клиент для mysql
--- Конец цитаты ---


Этот глюк виден не только из-под WinMysqlAdmin.
Если из-под mysql.exe запустить обыкновенный инсерт в эту таблицу (например, INSERT INTO todo SET t = NOW(), status = \'не выполнено\', content = \'do smth.\'), то ответом будет ERROR 1054: Unknown column \'t\' in \'field list\'.
Если же создать новую таблицу, в которой у поля status будет тип varchar, то всё инсертится нормально.

Аналогичным образом возникают проблемы и с перловскими скриптами, работающими с этой таблицей и описанными в книге.

Phoinix:
Forza

Почитай доки о том какие наименования полей не рекомендованы для использования в MySQL, например слово status - точно запрежено, он воспринимает его не как название поля...

А вообще, если работаешь под виндой, то используй mysqlcc, там есть замечательная функция Query, которая за счет подстветки  позволяет увидеть все ошибки SQL запроса до его исполнения...

Forza:

--- Цитировать ---Phoinix:
Почитай доки о том какие наименования полей не рекомендованы для использования в MySQL, например слово status - точно запрежено, он воспринимает его не как название поля...
--- Конец цитаты ---


Если ту переменную типа ENUM обозвать любым другим именем (хоть qwerty) происходит аналогичное - некоторые поля из её таблицы получаются безымянными (я этот вариант сразу же проверил).


--- Цитировать ---Phoinix:
А вообще, если работаешь под виндой, то используй mysqlcc
--- Конец цитаты ---


mysqlcc или mysqlc? Я у себя нашёл только второй.

Навигация

[0] Главная страница сообщений

[#] Следующая страница

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 
Перейти к полной версии