Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > MySQL > Не могу создать таблицу в MySQL


Автор: korob2001 26.4.2004, 04:31
Привет всем!
Нужно создать такую таблицу в MySQL:
Код

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

Но не получается sad.gif Пытался создать через phpMyAdmin 2.3.0
Долго не мог понять в чём дело, но затем, методом тыка, всётаки выяснил в чём проблема. Опишу подробно.

Как выяснилось, таблица создаётся но при попытке вставить в неё какие либо значения таким вот запросом:
Код

$dbh->do(qq{
                  INSERT INTO todo SET t = NOW(),
                  status = 'не выполнено',
                  content = ?", undef, $content});

модуль DBI.pm ( Perl ) выдаёт такую ошибку:
Код
DBD::mysql::Db do failed: Unknown column 't' in 'field list' at C:\home\LOCALH~1\cgi-bin\MYSQL_~1\todo\todo1.pl line 24.


После этого пытаюсь просмотреть эту таблицу в phpMyAdmin 2.3.0, заметил что действительно в таблице есть три колонки, но две из них не имеют имени, только одна осталась такой как и ожидалось, status. Затем несколько раз удалял таблицу и пытался создать снова, результат оставался тем же. После нескольких попыток заметил что все буквы я, в моём случае их две в строке 'выполняется', были заменены следующими символами 'выполн','етс','', мне это не понравилось hmmm.gif Решил попробовать снова удалить таблицу и создать её же, только уже без букв я, точнее я заменил буквы я буквами y. Как вы наверное уже поняли всё заработало.

Но всё же мне интересно знать:

Почему MySQL не хочет работать с символом я?
Как это лечится?

Можно конечно оставить и символы y вместо я, а затем при каждом запросе, при помощи Perl, делать замену:
Код

$var =~ s/y/я/g;
или
$var =~ tr/y/я/;

Но мне почему-то кажется что это не самый лучший подход. smile.gif

Может у кого была такая проблема? Помогите понять smile.gif
Заранее спасибо за ваши ответы,
Денис

Автор: Secandr 26.4.2004, 07:03
korob2001
Сделай в енум надписи английские (по 1-2 буквы), а в перле заведи массивчик и пиши $alert{$var} - проще менять название статуса и не нужно мучаться.

Автор: Vaulter 26.4.2004, 09:23
а вообще, что мешает сделать status интом,
0 - не выполнено
1 - выполнено
2 - выполняется

не спортивно конечно, но зато быстро ;)

Автор: korob2001 26.4.2004, 11:13
Большое спасибо. Всё понял. ;)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)