Автор Тема: CREATE TABLE и ENUM (глюки!)  (Прочитано 4635 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Forza

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 288
  • +0/-0
  • 0
    • Просмотр профиля
CREATE TABLE и ENUM (глюки!)
« : 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.
« Последнее редактирование: 17 Апреля 2004, 14:05:16 от Forza »

Оффлайн Макс

  • vir magni ingenii
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3534
  • +0/-0
  • 2
    • Просмотр профиля
CREATE TABLE и ENUM (глюки!)
« Ответ #1 : 17 Апреля 2004, 16:51:24 »
Forza
наверняка это глюк WinMysqlAdmin. Найди какой-нибудь другой клиент для mysql
First learn computer science and all the theory. Next develop a programming style. Then forget all that and just hack. ( George Carrette )

Оффлайн Forza

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 288
  • +0/-0
  • 0
    • Просмотр профиля
CREATE TABLE и ENUM (глюки!)
« Ответ #2 : 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, то всё инсертится нормально.

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

Оффлайн Phoinix

  • RW
  • Ветеран
  • *****
  • Сообщений: 1097
  • +0/-0
  • 2
    • Просмотр профиля
    • http://phoinix.ucoz.ru
CREATE TABLE и ENUM (глюки!)
« Ответ #3 : 18 Апреля 2004, 12:08:21 »
Forza

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

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

Оффлайн Forza

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 288
  • +0/-0
  • 0
    • Просмотр профиля
CREATE TABLE и ENUM (глюки!)
« Ответ #4 : 18 Апреля 2004, 13:12:48 »
Цитировать
Phoinix:
Почитай доки о том какие наименования полей не рекомендованы для использования в MySQL, например слово status - точно запрежено, он воспринимает его не как название поля...


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

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


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

Оффлайн Phoinix

  • RW
  • Ветеран
  • *****
  • Сообщений: 1097
  • +0/-0
  • 2
    • Просмотр профиля
    • http://phoinix.ucoz.ru
CREATE TABLE и ENUM (глюки!)
« Ответ #5 : 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, тема не раз поднималась, не используй его и проблем не будет... ;)

Оффлайн Forza

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 288
  • +0/-0
  • 0
    • Просмотр профиля
CREATE TABLE и ENUM (глюки!)
« Ответ #6 : 18 Апреля 2004, 18:17:52 »
Цитировать
Phoinix:
Совсем забыл, собака порылась здесь, символ "я" проблемный в MySQL, тема не раз поднималась, не используй его и проблем не будет...


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

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

Есть ещё какие-нибудь проблемные символы у MySQL?
И надеюсь, проблема буквы "я" не распространяется на содержимое таблиц?

Оффлайн Alexandr

  • Фанат форума
  • Ветеран
  • *****
  • Сообщений: 865
  • +0/-0
  • 0
    • Просмотр профиля
    • http://gtp.hobi.ru
Kiss my CSS
Pусские gtp gp3 ( midi + tab ) -   - Все для Авто.

Оффлайн Alexandr

  • Фанат форума
  • Ветеран
  • *****
  • Сообщений: 865
  • +0/-0
  • 0
    • Просмотр профиля
    • http://gtp.hobi.ru
CREATE TABLE и ENUM (глюки!)
« Ответ #8 : 20 Апреля 2004, 08:32:15 »
Так что до сих пор (до 4.0.18) не подлечили.... :-(
Kiss my CSS
Pусские gtp gp3 ( midi + tab ) -   - Все для Авто.

Оффлайн MadDog

  • Главный Металликолог
  • Ветеран
  • *****
  • Сообщений: 679
  • +0/-0
  • 2
    • Просмотр профиля
CREATE TABLE и ENUM (глюки!)
« Ответ #9 : 20 Апреля 2004, 08:58:38 »
Цитировать
Forza:
ENUM(\'не выполнено\',\'выполнено\', \'выполняется\')

[OFF]Я вот поражаюсь, как у нас народ любит создавать себе проблемы на пустом месте.  :( А что нельзя просто написать например так: .... ENUM (\'n\',\'y\',\'e\')? Сразу все проблемы отпадут.[/OFF]
Phoinix
у меня поля с названеим status довольно часто используются и ничего такого критичного не замечал.
So let it be written
So let it be done I\'m creeping death

Оффлайн Phoinix

  • RW
  • Ветеран
  • *****
  • Сообщений: 1097
  • +0/-0
  • 2
    • Просмотр профиля
    • http://phoinix.ucoz.ru
CREATE TABLE и ENUM (глюки!)
« Ответ #10 : 20 Апреля 2004, 09:34:28 »
MadDog

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

 

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