Если вы помните мою статью Как отключить строгий режим MySQL в Laravel Forge (Ubuntu), то вы наверняка вспомните, что в MySQL 5.7 был представлен новый режим, который мы обычно называем «строгим». На самом деле он является сочетанием новых режимов, которые в сумме делают обработку ваших MySQL запросов чуть точнее, чем раньше.
В предыдущей статье я рассказал, как отключить его на Ubuntu, но после этого Адам Ватан добавил в Laravel функцию, которая позволяет определить, используете ли вы «строгий режим», а также позволяет настроить, какие именно режимы вы бы хотели включить — всё прямо в коде.
Если есть возможность задать параметр конфигурации в коде, а не на сервере, и это не повлияет на производительность, то я всегда предпочту такой вариант. Ведь в этом случае мне надо будет делать на одну вещь меньше каждый раз, когда я разворачиваю приложение на новом сервере. Поэтому я очень доволен этой функцией.
Стоит отметить, что вы можете использовать эту функцию не только для того, чтобы отключить строгий режим в версии 5.7. Можно также включить его в версии 5.6. Было бы разумно включить этот режим на всех приложениях, работающих на версии 5.6, чтобы вы могли подготовиться к версии 5.7 и проверить, не сломается ли что-нибудь при включении различных строгих режимов.
MySQL 5.7 и «строгий» режим
Прежде чем поговорить об этой функции, давайте вкратце выясним, что означает «строгий режим».
В MySQL есть «режимы», каждый из которых включает или отключает определённое поведение. Например, режим ERROR_FOR_DIVISION_BY_ZERO, как вы уже догадались, выдаёт ошибку при делении на ноль в SQL-операции деления. Без включения этого режима, вы просто получите результат NULL без уведомления.
«Строгий режим» на самом деле является набором включённых по умолчанию режимов версии 5.7, в который входят следующие режимы:
ONLY_FULL_GROUP_BY STRICT_TRANS_TABLES NO_ZERO_IN_DATE NO_ZERO_DATE ERROR_FOR_DIVISION_BY_ZERO NO_AUTO_CREATE_USER NO_ENGINE_SUBSTITUTION
Вы можете ознакомиться с этими режимами в документации MySQL.
До версии 5.7 единственным включённым режимом был NO_ENGINE_SUBSTITUTION.
Включение и выключение строгого режима в Laravel 5.2
Благодаря этой новой функции в Laravel теперь есть возможность сделать три вещи: отключить «строгий режим», вернувшись тем самым к поведению версии 5.6 и ниже; включить «строгий режим», установив тем самым поведение версии 5.7; или же самостоятельно настроить все режимы.
Эти настройки находятся в config/database.php в разделе connections.mysql. Для начала давайте посмотрим на включение и отключение «строгого» режима:
'connections' => [
'mysql' => [
// Behave like MySQL 5.6
'strict' => false,
// Behave like MySQL 5.7
'strict' => true,
]
]
Настройка режимов
Но что, если вам не нужны дефолтные режимы версии 5.6 и 5.7? Просто настройте их самостоятельно.
'connections' => [
'mysql' => [
// Проигнорировать этот ключ и положиться на строгий ключ
'modes' => null,
// Явно отключить все режимы, переопределив строгую настройку
'modes' => [],
// Явно включить определённые режимы, переопределив строгую настройку
'modes' => [
'STRICT_TRANS_TABLES',
'ONLY_FULL_GROUP_BY',
],
]
]
Вот и всё, друзья
Теперь у вас есть возможность взять полный контроль над тем, какие режимы включить на сервере MySQL для вашего приложения, через код, не трогая настройки сервера. Проще простого.
Я рекомендовал бы оставить их всех включёнными по умолчанию. Но бывают случаи при конкретных вариантах использования или со старыми проектами, когда вам нужно настроить этот список, и теперь это возможно и стало ещё проще.
Комментарии (1)
https://habrahabr.ru/post/278629/