[Закрыть]
 
popoff.donetsk.ua
Желание любить выдаёт утомлённость и пресыщенность собой; желание быть любимым, напротив, - тоску по себе, себялюбие. Любящий раздаривает себя; тот, кто хочет стать любимым, стремиться получить в подарок самого себя. /Фридрих Ницше/
Начало | Новости | Статьи | Форум | Опросы | Карта сайта | Обо мне
popoff.donetsk.ua - Форум - Программирование на PHP - Ошибка "User Error: Field 's_charset' doesn't have a default value" при инсталляции системы

Ошибка "User Error: Field 's_charset' doesn't have a default value" при инсталляции системы

форумы popoff.donetsk.ua
Страницы: [1]
<< Новый  |  Старый >>  |  Ответ не возможен

Внимание! Этот топик устарел. Пожалуйста, создайте новый топик, чтобы задать интересующий Вас вопрос.

Автор Сообщение
d.k.Brazz
Денис
Сен, 2008
Сообщений: 3
d.k.Brazz url://forum.message:2678
Ошибка "User Error: Field 's_charset' doesn't have a default value" при инсталляции системы

в файле cms.db.php есть такой вот кусок

<?php mysql_query_log("
  create table "
.CMS_TABLE."lang(
    k_lang int not null auto_increment primary key,

    s_code tinyblob not null,
    unique index idx_code(s_code(8)),

    s_charset tinyblob not null,
    s_dic tinyblob not null,
    s_param blob not null
  ) default character set binary"
);
mysql_query_log("insert into ".CMS_TABLE."lang set s_code='".CMS_LANGUAGE_DEFAULT."'");?>


при создании базы на этом инсерте вываливается ошибка

User Error: Field 's_charset' doesn't have a default value [cms.db.php 68 - all.db.php 10 - prg.sql.create.html.php 43] insert into light_cms_lang set s_code='ru' [debug.php 32 - mysql.query.php 66 - cms.db.php 68 - all.db.php 10 - prg.sql.create.html.php 43]

т.к. в создаваемой таблице для полей s_charset, s_dic и s_param не установлены дефолтные значения и ограничение NOT NULL

Аналогичная проблема с text.db.php

<?php mysql_query_log("
  create table "
.TEXT_TABLE."item(
    k_text int not null,
    unique index idx_id(k_text),

    dt_create datetime not null,
    i_order int not null,
    is_confirmed tinyint not null,
    k_news int not null,
    s_file tinyblob not null,
    s_param blob not null,
    uid_create int not null,

    index idx_file(s_file(64))
  ) default character set binary"
);
mysql_query_log("insert into ".TEXT_TABLE."item set k_text=".mysql_tree_top(TEXT_TABLE.'tree').",dt_create='".a_date_unix_mysql(time())."',s_file='root'");
 
?>

PS: вышеописанное касается версии popoff-light-20080314.zip

popoff
Yuri
Июл, 2004
Сообщений: 940
popoff url://forum.message:2679

d.k.Brazz,
откройте Ваш my.ini, удалите оттуда параметр
sql_mode=
и перезапустите MySQL.

________________________________
Если не будет деревьев — нам нечем будет дышать, если вода загрязнится — нам нечего будет пить.
d.k.Brazz
Денис
Сен, 2008
Сообщений: 3
d.k.Brazz url://forum.message:2680

убрал STRICT_TRANS_TABLES
хотя для чего то его все же ввели в 5.x
и для чего то установили по умолчанию

Да и явное указание значений DEFAULT на мой взгляд улучшает читаемость кода и понимание структуры базы. Особенно когда у читающего есть более-менее глубокие познания в SQL вообще и незнание особенностей MySQL в частности

PS: хотя перелопатить кучу CREATE TABLE ради совместимости с 5.x неблагодарное занятие

popoff
Yuri
Июл, 2004
Сообщений: 940
popoff url://forum.message:2681

d.k.Brazz,
Фишка в том, что если прописать значения по умолчанию, то появится сообщение об ошибке:
BLOB/TEXT column 'ххх' can't have a default value
То есть, изменить нужно не только все CREATE TABLE, а вообще все запросы в системе.

Это, в свою очередь, означает, что если в обычных условиях мы можем просто взять и добавить поле в таблицу. То с этой настройкой при добавлении одного строкового поля в таблицу нужно переделывать весь код, связанный с этой таблицей.

Включёное STRICT_TRANS_TABLES, кстати, не является поведением по умолчанию в соответствие с документацией, но фактически является установкой по умолчанию при использовании инсталлятора msi под Windows. Если я не ошибаюсь, то там при инсталляции задаётся какой-то вопрос такой, что если оставить там ответ по умолчанию, то включается эта настройка.

Также, в той же документацией написано, что (в моём вольном переводе): «Проверка входных данных, выполнение которой требуют некоторые режимы, требует больше времени, чем если бы такой проверки не было. И хотя это время не очень большое, если Вам такая проверка не требуется, то MySQL даёт возможность выключить strict mode. Тем не менее, если такие проверки Вам требуются, то strict mode может предоставить Вам их».

Сказать о том, что такие проверки требуются, я не могу, поэтому, я решил забить и оставить всё как есть.

________________________________
Если не будет деревьев — нам нечем будет дышать, если вода загрязнится — нам нечего будет пить.
d.k.Brazz
Денис
Сен, 2008
Сообщений: 3
d.k.Brazz url://forum.message:2682

Действительно, параметры зависят от выбора опций в мастере установки
вот что вычитал в доке

You can change the SQL mode at runtime by using a SET [GLOBAL|SESSION] sql_mode='modes' statement to set the sql_mode system value. Setting the GLOBAL variable requires the SUPER privilege and affects the operation of all clients that connect from that time on. Setting the SESSION variable affects only the current client. Any client can change its own session sql_mode value at any time.

MySQL Reference Manual


т.е. можно сразу после коннекта принудительно задать тот режим под который заточены скрипты.
примерно так

SET SESSION sql_mode = ""

а «BLOB/TEXT column 'ххх' can't have a default value» тоже вываливается только при STRICT_TRANS_TABLES
прям замкнутый круг какой-то - указать DEFAULT для blob/text нельзя, а неуказать - боком выходит

popoff
Yuri
Июл, 2004
Сообщений: 940
popoff url://forum.message:2685

сразу после коннекта принудительно задать тот режим под который заточены скрипты.
примерно так
SET SESSION sql_mode = ""

d.k.Brazzфорумы popoff.donetsk.ua

Поддерживаю идею.

________________________________
Если не будет деревьев — нам нечем будет дышать, если вода загрязнится — нам нечего будет пить.

Внимание! Этот топик устарел. Пожалуйста, создайте новый топик, чтобы задать интересующий Вас вопрос.

Страницы: [1]
<< Новый  |  Старый >>  |  Ответ не возможен
Вход
Поиск[?]:
Программное обеспечение любой сложности
koins.com.ua