автоинкремент в mysql

Discussion in 'PHP' started by Дикс, 17 Sep 2008.

  1. Дикс

    Дикс Elder - Старейшина

    Joined:
    16 Apr 2006
    Messages:
    1,194
    Likes Received:
    227
    Reputations:
    26
    Терзают меня смутные сомнения, что я об этом уже спрашивал - но никак не могу найти тему.
    В общем такие дела:
    из скрипта выполняю запрос - INSERT INTO *** VALUES ( '', 'test', 'test' и т.д.
    Первый столбец - id int(10) auto_increment NOT NULL

    В основном всегда айдишник вставляется автоматически. Но давным давно у меня было так, что он ругался - "не задано значения для столбца id". И в ГУЙне для mysql5 при вставке бывает частенько такая ошибка - но при этом запись создаётся.

    У меня тогда решилось тем, что я изменил какую-то опцию в my.cnf. Вроде это была какая-то новая фича от разработчиков, которую надо было отключить..

    Щас вот убей, не могу вспомнить че за режим я там переключал - может кто подскажет?
     
  2. Ponchik

    Ponchik Хлебо-булочное изделие

    Joined:
    30 Aug 2005
    Messages:
    687
    Likes Received:
    807
    Reputations:
    311
    INSERT INTO *** VALUES (NULL, 'test', 'test' и т.д.
    И поле ID должно быть NOT NULL
    Илиже при insert'e указывай все поля кроме id

    Это я так... На будующее... А с режимом - хз :)
     
    2 people like this.
  3. Дикс

    Дикс Elder - Старейшина

    Joined:
    16 Apr 2006
    Messages:
    1,194
    Likes Received:
    227
    Reputations:
    26
    во, нашёл:
    http://www.hcube.ru/support/faq/287/index.php?ELEMENT_ID=3109

    PHP:
    Out of range value adjusted for column 'USER_ID' или Incorrect integer value'' for column 'SESS_SESSION_ID'
    Out of range value adjusted for column 'USER_ID' или Incorrect integer value'' for column 'SESS_SESSION_ID'
    При работе системы получаем сообщение об ошибке MySQL

        
    MySQL Query ErrorINSERT INTO b_stat_session(GUEST_IDNEW_GUESTUSER_IDUSER_AUTH, ...) VALUES ('1''N''''N', ...) 
    [
    Out of range value adjusted for column 'USER_ID' at row 1


        
    MySQL Query ErrorINSERT INTO b_stat_session_data(DATE_FIRSTDATE_LASTGUEST_MD5SESS_SESSION_IDSESSION_DATAVALUES (now(),now(), 
      
    '76d5f8d2a62a729069c568492da19fdf','',SESS_REQUEST_UR_GRABBER_STOP_TIME";a:1:{i:0;i:121;}s:27:"ACTIVITY_EXCEEDING_NOTIFIED";N;}') 
    [Incorrect integer value: '' for column 'SESS_SESSION_ID' at row 1] 

    Ответ 

    Скорее всего, у вас установлен MySQL версии 5.x 
    Вам необходимо из значения для переменной sql-mode убрать STRICT_TRANS_TABLES. 

    1 вариант: изменение конфигурации сервера через my.cnf. Например, 
        sql-mode="
    NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
    вместо 
        sql-mode="
    STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

    2 вариант: если у Вас нет доступа к конфигурационным файлам MySQL-сервера, попробуйте в /bitrix/php_interface/after_connect.php добавить строку: 
       
    $DB->Query("set sql_mode=''") 

    Подробнее на официальном сайте: 
    http://dev.mysql.com/doc/refman/5.0/en/server-sql-mode.html
     
  4. Дикс

    Дикс Elder - Старейшина

    Joined:
    16 Apr 2006
    Messages:
    1,194
    Likes Received:
    227
    Reputations:
    26
    да, с null у меня всё в порядке было.
    значит у проблемы три решения:
    1. исправить конфиг (самое нежелательное)
    2. выполнить "set sql_mode=''"
    3. использовать null (предпочтительное)