|
|
|
| Помогите кто-нибудь, очень прошу!
Затык на совершенно ровном месте.
Создаю таблицу скриптом php
...'CREATE TABLE IF NOT EXIST table1 ( ... col1 VARCHAR (32), KEY (col1),...)'
Всё проходит. Таблица есть. Структура нормальная - проверял.
Но когда пытаюсь хоть что-то туда воткнуть из-под php:
mysql_query ('INSERT INTO table1 SET "(col1='abcdef') " ;
то получаю "data too long for column "col1" at the row 1"
Пробовал в Insert синтаксис с VALUES - то же. В чем может быть проблема?
MySQL 5.0.15, дефолтом стоит cp1251. php тоже пятый. | |
|
|
|
|
|
|
|
для: Сашка
(20.12.2005 в 19:55)
| | Хм... а если ключик (KEY) на время убрать - пропадает или всё также? | |
|
|
|
|
|
|
|
для: cheops
(20.12.2005 в 23:10)
| | Ага, спасибо огромное!!!
Пропало!!!! Всё заработало!!!
Только как бы всё-таки это поле проиндексировать? Очень бы хотелось...
Вот, собственно, таблица. Я бы хотел забить индекс и по us_login...
$crt = "CREATE TABLE IF NOT EXISTS ";
$tail= ") TYPE=MYISAM CHARACTER SET=koi8r INSERT_METHOD=LAST" ;
На этот хвост не обращайте внимания. Всем этим я игрался - и типом таблицы, и способом вставки, и остальным...
$t_us =' user ('; // таблица пользователей
$t_us.='us_id MEDIUMINT UNSIGNED NOT NULL AUTO_INCREMENT, PRIMARY KEY (us_id),';
$t_us.='us_login VARCHAR (32),'; // логин
$t_us.='us_pass CHAR (32),'; // пароль
$t_us.='us_itself BLOB (1024),'; // о себе
$t_us.='us_town VARCHAR (30),'; // откуда (город и т.д.)
$t_us.='us_st_str VARCHAR (30),'; // статусная строка (текст)
$t_us.='us_red_stat ENUM ("red","supred","glred"),'; // редакторский статус
$t_us.='us_adm_stat ENUM ("admin","super"),'; // админстатус
$t_us.='us_id_bun SMALLINT UNSIGNED,'; // идентиф. бана
$t_us.='us_id_avatar MEDIUMINT UNSIGNED,'; // номер файла аватарки
$t_us.='us_id_photo MEDIUMINT UNSIGNED,'; // номер файла фотографии
$t_us.='us_icq VARCHAR (12),'; // номер аськи
$t_us.='us_jabber VARCHAR (12),'; // номер джаббера
$t_us.='us_email VARCHAR (30),'; // мыло
$t_us.='us_pr_vis INT,'; // предыдущий визит
$t_us.='us_cur_vis INT,'; // текущий визит
$t_us.='us_register INT,'; // дата и время регистрации
$t_us.='us_bithday INT, KEY (us_bithday),'; // день рождения
$t_us.='us_show_email CHAR (0),'; // флаг: NULL - email не отображать
$t_us.='us_send_email CHAR (0),'; // флаг: посылать ли сообщения о приходе писем на личку
$t_us.='us_del CHAR (0),'; // флаг: пользователь себя удалил
$t_us.='us_no_graph CHAR (0)'; // флаг: пользователь отключил графику
$parm = $crt.$t_us.$tail;
$ver = mysql_query($parm);
echo "<p>Создание user...</p>";
if(!$ver)
{
echo "<p>Ошибка в запросе на создание таблицы user</p>";
exit();
}
|
| |
|
|
|
|
|
|
|
для: Сашка
(21.12.2005 в 00:27)
| | А вы его после создания таблицы отдельным запросом создайте (указав точно его длину)
CREATE INDEX col1 ON table1 (co1(32))
|
В качестве длины индекса можно указать меньшую длину, скажем 10 вместо 32 - скорость не упадёт, а места индексы будут занимать меньше. | |
|
|
|
|
|
|
|
для: cheops
(21.12.2005 в 13:41)
| | Спасибо Вам огромнейшее за ответ! Буду пробовать.
Попробовал. Вышло всё, как надо. Очень Вам благодарен за помощь. Дело в том, что даже разработчики MySQL отписались на мой запрос откровенной белибердой. А на их форуме не ответили вообще. Помогли только Вы.
При встрече - ящик пива с меня! :))) | |
|
|
|
|
|
|
|
для: Сашка
(20.12.2005 в 19:55)
| | А можно поподробнее как победили
data too long for column "col1" at the row 1
какой и где KEY забивать?
MySQL 5, cp1251, php 5 | |
|
|
|
|
|
|
|
для: Snz
(05.02.2006 в 16:58)
| | У вас тип col1 какой? | |
|
|
|