Я работал над сайтом с включенным строгим режимом MySQL. У одного человека была длинная строка агента пользователя, которая была зарегистрирована в нашей таблице журналов, и, к сожалению, строка пользовательского агента превысила лимит для столбца и, таким образом, вызвала предупреждение. Данные не были вставлены вообще.
Чтобы избежать таких проблем, я должен отключить строгий режим MySQL или мне нужно что-то придумать (я использую PHP)?
Проверяйте данные перед их вставкой в свою базу данных. Если строка слишком большая, чтобы соответствовать вашей таблице, либо ваш столбец слишком узкий, либо данные недействительны. Вам нужно решить, урезаете ли вы его перед сохранением, выполните некоторые сообщения об ошибках или и то, и другое.
Не выключайте функции безопасности вашей СУБД, это совершенно неправильно.
Вы предпочли бы, чтобы ваши данные молча усекались (возможно, приводя к поломке данных), или вы хотя бы хотели бы знать, что у вас есть проблема?
Я бы рекомендовал оставить строгий режим включенным и ограниченным, проверяя ваши данные на вашем PHP. Ваше приложение PHP знает или, по крайней мере, должно знать, что делать со строкой, которая слишком длинная. Если вы отключите строгий режим и оставьте это решение MySQL, то MySQL беззвучно усечет ваши строки, и вы получите базу данных, полную мусора.
Изменение и исправление кода легко, исправление сломанных данных часто невозможно.
Если вы отключите строгий режим, у вас появятся такие странные проблемы, как это:
VARCHAR (4) хранит больше символов, чем четыре
Ну, это зависит от вас, попробуйте его с отключенным строгим режимом и посмотрите, как все работает, у меня никогда не было проблемы с ним, но будьте осторожны.
Однако, если длинные пользовательские агенты являются единственной проблемой со строгим режимом, и вы не визуально читаете их, я рекомендую просто хешировать ваши UA или увеличивать длину поля.