Я хотел бы использовать только неструктурированную модель данных, например, как вы предлагаете, если вы храните неструктурированные данные или документы (например, FriendFeed).
Альтернативных мысли хранения
Есть много более подходящих систем хранения данных для неструктурированных данных, чем сервер SQL. Я бы рекомендовал объединить один из них с существующей структурированной базой данных.
Опции SQL
Если вы не можете сделать это и должны хранить неструктурированные данные в вашей БД SQL, у вас есть несколько вариантов, тип данных на самом деле не единственная проблема, как ваши данные записано.
Некоторая структура, позволяющая приложению считывать данные, чтобы иметь возможность легко анализировать данные без сложных функций манипуляции строкой.
Уметь определять модель данных в приложении, поэтому, когда вы читаете данные, вы знаете, что у вас есть.
Следующие 2 вариант обеспечивает решение обе эти проблемы ...
XML - XML типа данных
Вы должны рассмотривать данные, которые вы хранящие.Если вам нужно вернуть его и выполнить сложные поиски в содержимом, тогда ваш лучший выбор - XML. Он также позволяет проверить, что хранящиеся данные соответствуют определенной структуре (с использованием dtd). См. Эту статью.
http://msdn.microsoft.com/en-us/library/ms189887.aspx
или JSON - NVARCHAR (макс) тип данных
Если вам необходимо вернуть эти данные для отображения на веб-странице или использовать в Javascript, затем хранить в формате JSON будет проще работать с. Вы можете легко загрузить его в объектную модель, с которой можно напрямую работать и манипулировать. Недостатком является то, что сложные поиски по данным будут очень медленными по сравнению с XPATH (итерация по всем объектам, поиск которых соответствует).
Если вы сохраняете данные с других языков или странные символы, переходите к nvarchar (версия Unicode). В противном случае варчар был бы наиболее эффективным.
Так плохо просто определить meta_value как огромный VARCHAR и просто убедитесь, что пользовательский ввод не выше максимального месторождения? – tridat
Это будет работать, да, если вы когда-нибудь захотите больше, чем 65535 байт. Если вы это сделаете, то ТЕКСТ (до 4 ГБ), как предложил @Treby, будет работать (но может вызвать проблемы, см. Http://dev.mysql.com/doc/refman/5.0/en/blob.html) – rjp
Я думаю, что VARCHAR фактически использует больше пробелов (один или два байтовых префикса). Это содержимое по-прежнему встроено в данные строки (в отличие от поля типа TEXT, где строка содержит ссылку), и поэтому будет использовать максимальную длину пространства для хранения. –