mic*_*man 310
http://dev.mysql.com/doc/refman/5.0/en/char.html
VARCHAR列中的值是可变长度字符串.长度可以指定为MySQL 5.0.3之前的0到255之间的值,5.0.3及更高版本中的0到65,535之间的值.MySQL 5.0.3及更高版本中VARCHAR的有效最大长度受最大行大小(65,535字节,在所有列之间共享)和使用的字符集的限制.所以...
<MySQL 5.0.3使用TEXT
或
> = MySQL 5.0.3使用VARCHAR(2083)
Dan*_*wak 32
VARCHAR(512)
(或类似的)应该足够了.但是,由于您实际上并不知道相关网址的最大长度,我可能会直接指向TEXT
.这样做的危险当然是效率的降低,因为CLOB
s比简单的字符串数据类型慢得多VARCHAR
.
Bob*_*bst 16
varchar(max)
对于SQLServer2005
varchar(65535)
对于MySQL 5.0.3及更高版本
这将根据需要分配存储,不应影响性能.
您需要根据URL的使用频率以及是否确实需要将长度保持为未绑定来在TEXT或VARCHAR列之间进行选择.
使用VARCHAR,maxlength> = 2,083,如micahwittman建议的那样:
使用TEXT如果:
小智 9
您应该使用带有ASCII字符编码的VARCHAR.URL是编码百分比,国际域名使用punycode,因此ASCII足以存储它们.这将比UTF8使用更少的空间.
VARCHAR(512) CHARACTER SET 'ascii' COLLATE 'ascii_general_ci' NOT NULL
Run Code Online (Sandbox Code Playgroud)
这实际上取决于您的用例(请参阅下文),但是存储TEXT
会带来性能问题,并且VARCHAR
在大多数情况下听起来像是过大的杀伤力。
我的方法:使用较大但不合理的VARCHAR
长度(例如,VARCHAR(500)
大约),并鼓励需要较大URL的用户使用URL缩短器(例如)safe.mn
。
Twitter的方法:对于非常好的UX,为长度过长的URL提供一个自动URL缩短器,并将链接的“显示版本”存储为URL的片段,并在其末尾带有省略号。(示例:http://stackoverflow.com/q/219569/1235702
将显示为stackoverflow.com/q/21956...
,并将链接到缩短的URL http://ex.ampl/e1234
)
注意事项和警告