Доброй ночи, Гость! Представляем Вам наши форумы. Вы можете зарегистрироваться чтобы писать на форумах или зайдите под своим именем, если Вы уже регистрировались.
   
   


Форум
 SX CMS / Техническая помощь
         Ошибка 1067

Похожие темы

Ошибка 1067


События Воскресенье, 16.04.2023, 15:31

Jek

Группа: Пользователь
Ранг: Продвинутый
Cообщений: 112
Регистрация: 27.10.2009
Город: Москва
Если вы работаете в комплексном решении разработки ваших проектов, к примеру в XAMP, вы возможно столкнётесь с непредвиденными подводными камнями при работе с базой данных. Это обусловлено некоторыми нюансами с параметрами режима sql.

У меня возникла проблема, и я уверен, что ограничение MySql нам поможет. Итак, приступим к следующим командам:

Чтение текущего значения переменных:
Код
show variables like 'sql_mode';

Результат предыдущей команды:
Цитата
| Variable_name | Value
| sql_mode | NO_ZERO_IN_DATE,NO_ZERO_DATE,NO_ENGINE_SUBSTITUTION

Временно снять ограничение по дате:
Код
set sql_mode='NO_ENGINE_SUBSTITUTION';

Запустите все необходимые команды, такие как INSERT/UPDATE/CREATE и т. д.

После этого восстановите sql_mode как было раньше:
Код
set sql_mode='NO_ZERO_IN_DATE,NO_ZERO_DATE,NO_ENGINE_SUBSTITUTION';

-не стоит беспокоится об этом, т.к. при следующем подключении к базе данный параметр будет сброшен по умолчанию.

Для самых ленивых разбираться, тобы изменить режим SQL во время выполнения, перед манипуляцией в таблице задать режим в самом начале запроса:
Код
SET sql_mode = '';

- для MariaDB временная отменена настроек по умолчанию, в моём случае для типа поля DATETIME, где при создании, изменении поля выдавалась ошибка:
Код
ALTER TABLE `table_name` MODIFY COLUMN `column_name` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00';
ERROR 1067 (42000): Invalid default value for 'column_name'

Кстати, если вы установите глобальные переменные в MySQL, например:
Код
SET GLOBAL sql_mode = 'NO_ENGINE_SUBSTITUTION';
SET SESSION sql_mode = 'NO_ENGINE_SUBSTITUTION';

Это не установит его ПОСТОЯННО , и он будет возвращаться после каждого перезапуска, подключения к базе.
Поэтому вы должны установить это в своем файле конфигурации (например, /etc/mysql/my.cnf в разделе [mysqld], в Windows путь будет отличатся \mysql\bin\my.ini), чтобы изменения оставались в силе после перезапуска MySQL:

Файл конфигурации: /etc/mysql/my.cnf
Код
[mysqld]
sql_mode = NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

ОБНОВЛЕНИЕ: для более новых версий Mysql (например, 5.7.8 или выше) может потребоваться немного другой синтаксис:
Код
[mysqld]
sql-mode="STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION"

Убедитесь, что между sql-modeсимволами подчеркивания стоит тире, а режимы заключены в двойные кавычки.
Всегда обращайтесь к MySQL Docs для своей версии, чтобы увидеть параметры режима sql

Отредактировано Алексей Д (Jek): 16.04.2023, 15:35:12
Благодарности MAPC2012


Пользователь офлайн


Похожие темы  |   Следующая тема

Быстрый переход:  
 

 Сейчас на сайте

Пользователей: 0, Гостей: 4

Поисковые боты: 195
Bot(159), oBot(29), BingBot(5), Yandex, Crawler
 Статистика форума

  Темы Сообщения Пользователи
За сутки:
За неделю:
За месяц:
Всего:
Мы приветствуем нового участника: wonad81290
 Дни рождения

Игорь Вишневский (55), borovoy.in (38), alfa-kms (36), delserf (30)
 Реклама

ГорМедЦентр в Москве . доставка шашлыка красноярск ryzhiy-master.ru
Copyright © 2009 - 2024 SX All rights reserved | Powered by SX CMS 1.06 UTF | Контакты