Я сериализую много массивов в php, которые должны храниться в базе данных с использованием mysql.
Длина финальной строки может сильно различаться от чего-либо между 2000 и 100 000+, мне было интересно, какой будет лучший тип столбца для этого?
В настоящее время я настроен как LONGTEXT
но я чувствую, что это слишком много! База данных уже активна и имеет около 3 миллионов строк, это новый столбец, который будет добавлен в ближайшее время.
благодаря
Всегда используйте любой тип данных BLOB
для сериализации данных, чтобы он не прерывался и прерывал сериализацию двоично-безопасным способом. Если максимальная длина конечной строки невелика, вам понадобится LONGBLOB
. Если вы знаете, что данные не заполнят 2 ^ 24 символа, вы можете использовать MEDIUMBLOB
. MEDIUMBLOB
составляет около 16 МБ, а LONGBLOB
– около 4 ГБ, поэтому я бы сказал, что вы довольно безопасны с MEDIUMBLOB
.
Почему двоичный тип данных? Текстовые типы данных в Mysql имеют кодировку. Кодировка символов будет влиять на то, как сериализованные данные переносятся между различными кодировками. Например, когда он хранится как Latin-1, но затем считывается как UTF-8 (например, из-за настройки кодирования соединения с драйвером базы данных), сериализованные данные могут быть повреждены, поскольку бинарные смещения сдвигаются, однако сериализованные данные не были закодированы для таких сдвигов. Сериализованные строки PHP являются двоичными данными, а не с какой-либо конкретной кодировкой.
Вы должны выбрать BLOB (как заметил Марк Б) в руководстве PHP для serialize ():
«Обратите внимание, что это [выдает] двоичную строку, которая может содержать нулевые байты и должна быть сохранена и обработана как таковая. Например, вывод serialize () обычно должен храниться в поле BLOB в базе данных, а не в CHAR или Текстовое поле."
Источник: http://php.net/serialize
Разумеется, следует учитывать и данные J.Money относительно размеров, но даже BLOB имеет свои пределы, и если вы собираетесь их превышать, вам понадобится MEDIUMBLOB или LONGBLOB.