Должен ли я отключить строгий режим MySQL? - PullRequest
6 голосов
/ 03 апреля 2011

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

Чтобы избежать подобных проблем, следует ли отключить строгий режим MySQL или придумать что-то самостоятельно (я использую PHP)?

Ответы [ 4 ]

9 голосов
/ 03 апреля 2011

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

Не не отключите функции безопасности вашей СУБД, это совершенно неправильно.

2 голосов
/ 03 апреля 2011

Вы бы предпочли, чтобы ваши данные молча усекались (возможно, это приводило к повреждению данных) или вы хотя бы хотели знать, что у вас проблема?

Я бы порекомендовал оставить строгий режим включенным и ограничивать проверку ваших данных в вашем PHP. Ваше PHP-приложение знает или, по крайней мере, должно знать, что делать со слишком длинной строкой. Если вы выключите строгий режим и оставите это решение для MySQL, MySQL будет молча обрезать ваши строки, и вы получите полную базу данных с мусором.

Легко изменить и исправить код, зачастую исправить поврежденные данные невозможно.

Если вы отключите строгий режим, вы получите странные проблемы, подобные этой:

VARCHAR (4) хранит больше символов, чем четыре

1 голос
/ 03 апреля 2011

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

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

0 голосов
/ 16 марта 2019

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

Если кто-то спрашивает, как правильно отключить строгий режим, просто добавив его в конфигурацию MySQL:

sql_mode=NO_ENGINE_SUBSTITUTION
innodb_strict_mode=0
...