Forum Webscript.Ru
Общие => Базы данных => Тема начата: 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.
-
Forza
наверняка это глюк WinMysqlAdmin. Найди какой-нибудь другой клиент для mysql
-
Макс:
наверняка это глюк 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, то всё инсертится нормально.
Аналогичным образом возникают проблемы и с перловскими скриптами, работающими с этой таблицей и описанными в книге.
-
Forza
Почитай доки о том какие наименования полей не рекомендованы для использования в MySQL, например слово status - точно запрежено, он воспринимает его не как название поля...
А вообще, если работаешь под виндой, то используй mysqlcc, там есть замечательная функция Query, которая за счет подстветки позволяет увидеть все ошибки SQL запроса до его исполнения...
-
Phoinix:
Почитай доки о том какие наименования полей не рекомендованы для использования в MySQL, например слово status - точно запрежено, он воспринимает его не как название поля...
Если ту переменную типа ENUM обозвать любым другим именем (хоть qwerty) происходит аналогичное - некоторые поля из её таблицы получаются безымянными (я этот вариант сразу же проверил).
Phoinix:
А вообще, если работаешь под виндой, то используй mysqlcc
mysqlcc или mysqlc? Я у себя нашёл только второй.
-
Forza
Программа называется MySQL Control Center - она фриварная
CREATE TABLE todo
(
t DATETIME NOT NULL,
content VARCHAR(255) NOT NULL,
status ENUM(\'не выполнено\',\'выполнено\', \'выполняется\') NOT NULL,
INDEX (t)
);
Совсем забыл, собака порылась здесь, символ "я" проблемный в MySQL, тема не раз поднималась, не используй его и проблем не будет... ;)
-
Phoinix:
Совсем забыл, собака порылась здесь, символ "я" проблемный в MySQL, тема не раз поднималась, не используй его и проблем не будет...
Да, действительно, у MySQL оказались очень непредсказуемые отношения с буквой "я":
после преобразования в "выполняетца" все столбцы получали имя, но при добавлении строки со значением status=выполняетца, поле status для этой строки в базе оказывалось пустым.
Естественно, с "выполнйаетца" всё заработало на ура.
Есть ещё какие-нибудь проблемные символы у MySQL?
И надеюсь, проблема буквы "я" не распространяется на содержимое таблиц?
-
http://forums.webscript.ru/showthread.php?s=&postid=79623#post79623
-
Так что до сих пор (до 4.0.18) не подлечили.... :-(
-
Forza:
ENUM(\'не выполнено\',\'выполнено\', \'выполняется\')
[OFF]Я вот поражаюсь, как у нас народ любит создавать себе проблемы на пустом месте. :( А что нельзя просто написать например так: .... ENUM (\'n\',\'y\',\'e\')? Сразу все проблемы отпадут.[/OFF]
Phoinix
у меня поля с названеим status довольно часто используются и ничего такого критичного не замечал.
-
MadDog
У меня тоже... но не рекомендуется же... ;)