Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Ошибка "data too long for column..."
 
 автор: Сашка   (20.12.2005 в 19:55)   письмо автору
 
 

Помогите кто-нибудь, очень прошу!
Затык на совершенно ровном месте.
Создаю таблицу скриптом 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 тоже пятый.

   
 
 автор: cheops   (20.12.2005 в 23:10)   письмо автору
 
   для: Сашка   (20.12.2005 в 19:55)
 

Хм... а если ключик (KEY) на время убрать - пропадает или всё также?

   
 
 автор: Сашка   (21.12.2005 в 00:27)   письмо автору
 
   для: 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();
  }

   
 
 автор: cheops   (21.12.2005 в 13:41)   письмо автору
 
   для: Сашка   (21.12.2005 в 00:27)
 

А вы его после создания таблицы отдельным запросом создайте (указав точно его длину)
CREATE INDEX col1 ON table1 (co1(32))

В качестве длины индекса можно указать меньшую длину, скажем 10 вместо 32 - скорость не упадёт, а места индексы будут занимать меньше.

   
 
 автор: Сашка   (21.12.2005 в 17:18)   письмо автору
 
   для: cheops   (21.12.2005 в 13:41)
 

Спасибо Вам огромнейшее за ответ! Буду пробовать.

Попробовал. Вышло всё, как надо. Очень Вам благодарен за помощь. Дело в том, что даже разработчики MySQL отписались на мой запрос откровенной белибердой. А на их форуме не ответили вообще. Помогли только Вы.
При встрече - ящик пива с меня! :)))

   
 
 автор: Snz   (05.02.2006 в 16:58)   письмо автору
 
   для: Сашка   (20.12.2005 в 19:55)
 

А можно поподробнее как победили
data too long for column "col1" at the row 1

какой и где KEY забивать?

MySQL 5, cp1251, php 5

   
 
 автор: cheops   (06.02.2006 в 00:55)   письмо автору
 
   для: Snz   (05.02.2006 в 16:58)
 

У вас тип col1 какой?

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования