varchar字段长度报告错误

时间:2011-03-07 04:44:29

标签: sql-server tsql

我有一个varchar(800)列,它是一个表中的主键,另一个表是FK。

问题是,如果我len(field) - 它说186.如果我复制/粘贴文本并在记事本或其他内容中检查,我有198个字符

内容如下:

http://news.google.com/news/url?sa=t&fd=R&usg=AFQjCNGGTo8JmCWDydNA19MrL4aON-02pA&url=http://creativity-online.com/news/chrysler-nokia-target-among-winners-of-teds-first-ad-contest/149189

关于为什么长度差异的任何想法?

修改

你是对的。我使用的是基于Web的sql管理器,这让我感到很蠢。

谢谢。

3 个答案:

答案 0 :(得分:3)

从数据库中读取URL后,您是否对URL进行HTML编码?

moriartyn建议SQL Server len函数将&amp;计为单个字符,但事实并非如此。但是,如果字段中的实际内容不是HTML编码的,并且在页面中插入时是HTML编码,则会将每个&字符更改为&amp;,这将占额外长度。< / p>

答案 1 :(得分:2)

我的猜测是因为你的文本中有三个&amp;,所以sql server len函数将这些作为&amp;&amp;或者一个字符,并且在记事本中它将它们计为每个五个,这将为您提供十二个额外的数字。

答案 2 :(得分:0)

186:

http://news.google.com/news/url?sa=t&fd=R&usg=AFQjCNGGTo8JmCWDydNA19MrL4aON-02pA&url=http://creativity-online.com/news/chrysler-nokia-target-among-winners-of-teds-first-ad-contest/149189

198:

http://news.google.com/news/url?sa=t&amp;fd=R&amp;usg=AFQjCNGGTo8JmCWDydNA19MrL4aON-02pA&amp;url=http://creativity-online.com/news/chrysler-nokia-target-among-winners-of-teds-first-ad-contest/149189

注意&amp;&:其中3个,&amp;长4个字符= 12

你既没有平等比较也没有比较相同的字符串。

在SQL中:

SELECT
  LEN('http://news.google.com/news/url?sa=t&fd=R&usg=AFQjCNGGTo8JmCWDydNA19MrL4aON-02pA&url=http://creativity-online.com/news/chrysler-nokia-target-among-winners-of-teds-first-ad-contest/149189'),
    LEN('http://news.google.com/news/url?sa=t&amp;fd=R&amp;usg=AFQjCNGGTo8JmCWDydNA19MrL4aON-02pA&amp;url=http://creativity-online.com/news/chrysler-nokia-target-among-winners-of-teds-first-ad-contest/149189')