Forum Webscript.Ru

Общие => Базы данных => Тема начата: Forza от 17 Апреля 2004, 13:57:32

Название: CREATE TABLE и ENUM (глюки!)
Отправлено: Forza от 17 Апреля 2004, 13:57:32
Здравствуйте.
В настоящий момент начинаю изучение 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.
Название: CREATE TABLE и ENUM (глюки!)
Отправлено: Макс от 17 Апреля 2004, 16:51:24
Forza
наверняка это глюк WinMysqlAdmin. Найди какой-нибудь другой клиент для mysql
Название: CREATE TABLE и ENUM (глюки!)
Отправлено: Forza от 17 Апреля 2004, 23:33:28
Цитировать
Макс:
наверняка это глюк 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, то всё инсертится нормально.

Аналогичным образом возникают проблемы и с перловскими скриптами, работающими с этой таблицей и описанными в книге.
Название: CREATE TABLE и ENUM (глюки!)
Отправлено: Phoinix от 18 Апреля 2004, 12:08:21
Forza

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

А вообще, если работаешь под виндой, то используй mysqlcc, там есть замечательная функция Query, которая за счет подстветки  позволяет увидеть все ошибки SQL запроса до его исполнения...
Название: CREATE TABLE и ENUM (глюки!)
Отправлено: Forza от 18 Апреля 2004, 13:12:48
Цитировать
Phoinix:
Почитай доки о том какие наименования полей не рекомендованы для использования в MySQL, например слово status - точно запрежено, он воспринимает его не как название поля...


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

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


mysqlcc или mysqlc? Я у себя нашёл только второй.
Название: CREATE TABLE и ENUM (глюки!)
Отправлено: Phoinix от 18 Апреля 2004, 14:17:36
Forza

Программа называется MySQL Control Center - она фриварная

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


Совсем забыл, собака порылась здесь, символ "я" проблемный в MySQL, тема не раз поднималась, не используй его и проблем не будет... ;)
Название: CREATE TABLE и ENUM (глюки!)
Отправлено: Forza от 18 Апреля 2004, 18:17:52
Цитировать
Phoinix:
Совсем забыл, собака порылась здесь, символ "я" проблемный в MySQL, тема не раз поднималась, не используй его и проблем не будет...


Да, действительно, у MySQL оказались очень непредсказуемые отношения с буквой "я":
после преобразования в "выполняетца" все столбцы получали имя, но при добавлении строки со значением status=выполняетца, поле status для этой строки в базе оказывалось пустым.

Естественно, с "выполнйаетца" всё заработало на ура.

Есть ещё какие-нибудь проблемные символы у MySQL?
И надеюсь, проблема буквы "я" не распространяется на содержимое таблиц?
Название: CREATE TABLE и ENUM (глюки!)
Отправлено: Alexandr от 20 Апреля 2004, 08:30:32
http://forums.webscript.ru/showthread.php?s=&postid=79623#post79623
Название: CREATE TABLE и ENUM (глюки!)
Отправлено: Alexandr от 20 Апреля 2004, 08:32:15
Так что до сих пор (до 4.0.18) не подлечили.... :-(
Название: CREATE TABLE и ENUM (глюки!)
Отправлено: MadDog от 20 Апреля 2004, 08:58:38
Цитировать
Forza:
ENUM(\'не выполнено\',\'выполнено\', \'выполняется\')

[OFF]Я вот поражаюсь, как у нас народ любит создавать себе проблемы на пустом месте.  :( А что нельзя просто написать например так: .... ENUM (\'n\',\'y\',\'e\')? Сразу все проблемы отпадут.[/OFF]
Phoinix
у меня поля с названеим status довольно часто используются и ничего такого критичного не замечал.
Название: CREATE TABLE и ENUM (глюки!)
Отправлено: Phoinix от 20 Апреля 2004, 09:34:28
MadDog

У меня тоже... но не рекомендуется же... ;)