varchar vs text – MySQL

в моем проекте пользователь может написать комментарий [plain text] и просмотреть другие комментарии, может удалить собственный комментарий, но не может обновить комментарий!
В этом случае, что я должен использовать?

Текст или Varchar (4048) ?
В чем преимущество и недостаток текста и Varchar (большой, как 4000) ?
Является ли он достаточно безопасным, если я заменяю только '<' на '& lt;' и '>' с '& gt;' чтобы все было в порядке ?
[Я не хочу конвертировать все, что нравится «» и …, чтобы сэкономить место, я просто хочу убедиться, что пользователь не может писать javascript]

Будет предел на лицевой стороне

Чтобы защитить себя от атаки XSS, закодируйте ее с помощью функции htmlentities.

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

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

Varchar обычно быстрее извлекается, когда размер является разумным, так как он хранится в таблице, где, когда TEXT хранится из таблицы с указателем на местоположение.

благодаря

(У вас много вопросов, я адресую тот, который находится в названии.)

Единственная разница между VARCHAR(4000) и TEXT заключается в том, что INSERT будет усекать до 4000 символов или 65536 байт соответственно.

Для меньших значений, чем 4000, бывают случаи, когда временная таблица в сложном SELECT будет работать быстрее, например, с VARCHAR(255) чем TINYTEXT . По этой причине я чувствую, что никогда не следует использовать TINYTEXT .

это зависит от поведения приложения. пространство, выделенное внутри таблицы блока, уменьшает пространство для других столбцов и уменьшает плотность данных внутри него. если полное сканирование таблицы используется mysql, многие блоки сканируются, это неэффективно. так что это зависит от ваших запросов sql.