Может войдёшь?
Черновики Написать статью Профиль

"Строгий" режим и другие настройки MySQL в Laravel 5.2

перевод

Если вы помните мою статью Как отключить строгий режим 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. Для начала давайте посмотрим на включение и отключение «строгого» режима:

PHP
'connections' => [
  
'mysql' => [
    
// Behave like MySQL 5.6
    
'strict' => false,

    
// Behave like MySQL 5.7
    
'strict' => true,
  ]
]

Настройка режимов

Но что, если вам не нужны дефолтные режимы версии 5.6 и 5.7? Просто настройте их самостоятельно.

PHP
'connections' => [
  
'mysql' => [
    
// Проигнорировать этот ключ и положиться на строгий ключ
    
'modes' => null,

    
// Явно отключить все режимы, переопределив строгую настройку
    
'modes' => [],

    
// Явно включить определённые режимы, переопределив строгую настройку
    
'modes' => [
      
'STRICT_TRANS_TABLES',
      
'ONLY_FULL_GROUP_BY',
    ],
  ]
]

Вот и всё, друзья

Теперь у вас есть возможность взять полный контроль над тем, какие режимы включить на сервере MySQL для вашего приложения, через код, не трогая настройки сервера. Проще простого.

Я рекомендовал бы оставить их всех включёнными по умолчанию. Но бывают случаи при конкретных вариантах использования или со старыми проектами, когда вам нужно настроить этот список, и теперь это возможно и стало ещё проще.

Как вы считаете, полезен ли этот материал? Да Нет

Комментарии (1)

VitalN

https://habrahabr.ru/post/278629/

Написать комментарий

Разметка: ? ?

Авторизуйся, чтобы прокомментировать.