varchar vs text - MySQL

时间:2011-04-21 03:27:55

标签: php mysql xss

在我的项目中,用户可以写评论[纯文本],查看其他评论,可以删除自己的评论,但无法更新评论!
在这种情况下,我应该使用哪种?

Text或Varchar(4048)
Text和Varchar的优点和缺点是什么(大似4000)如果我只更换'<',它是否足够安全与'& LT;”和'>'与'& GT;”确保一切正常
[我不想转换所有像''& ...,以节省空间,我只是想确保用户不能写javascript]

前端会有限制

4 个答案:

答案 0 :(得分:4)

当大小合理时,Varchar通常检索速度更快,因为它存储在表中,而TEXT通过指向位置的指针存储在表中。

由于

答案 1 :(得分:2)

(您有多个问题;我将解决标题中的问题。)

VARCHAR(4000)TEXT之间的区别在于INSERT将截断为4000 字符或65536 bytes ,分别为。

对于小于4000的值,有时复杂SELECT中的临时表运行速度会更快,例如VARCHAR(255)而不是TINYTEXT。出于这个原因,我觉得永远不应该使用TINYTEXT

答案 2 :(得分:1)

为了保护自己免受XSS攻击,请使用htmlentities函数对其进行编码。

除此之外,数据类型的选择与内容的大小有很大关系。如果它可能超过4048个字符,则使用文本数据类型。如果很多帖子都很大,使用text数据类型可能会减少浪费的数据空间,并且可能比巨型varchar表现稍好,但这取决于你的情况,你最好测试替代方案。

我通常更喜欢varchar,因为从编码的角度来看它更容易处理,如果没有其他的话,如果内容可能超过varchar的大小,则回退到文本。

答案 3 :(得分:1)

这取决于应用程序行为。在块表中分配的空间减少了其他列的空间并减少了其中的密度数据。如果mysql使用全表扫描,则会扫描许多块,效率很低。 所以这取决于你的sql请求。