2011-03-07 105 views
0

我有一个varchar(800)列,它是一个表中的主键,另一个表中是FK。varchar字段长度报告不正确

的问题是,如果我做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管理器,并欺骗了我。

谢谢。

+0

需要更多的信息。你如何插入桌子等? – richard 2011-03-07 04:48:53

+1

你究竟在哪里执行'len' - SQL Server或其他地方?您网址的那一行的确切内容是什么?用截图编辑您的问题。可能你会看到来自数据库外部的HTML编码,这会使问题失效。试试这个示例:'SELECT字段,LEN(字段)FROM MyTable WHERE ID = 123'。 – 2011-03-07 05:16:46

+0

@ p.campbell - 你对len的问题是正确的 – sirrocco 2011-03-07 07:02:18

回答

3

在您从数据库中读取URL后,您是否将HTML编码为URL?

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

2

我的猜测是,因为在你的文本中有三个&,sql服务器的len函数将这些数字计为&或一个字符,而在记事本中,它将它们计数为5,这会给你12个额外的那数。

+0

不,那不是。 SQL Server'len'函数不会将HTML实体计为单个字符。没有HTML排序规则。然而,它可能是内容实际上不包含HTML实体,并且在从数据库中读取之后,它是HTML编码的。 – Guffa 2011-03-07 05:07:11

+0

@Guffa好的,这很有道理。感谢您解释这一点。 – nickmoriarty 2011-03-07 05:38:05

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&fd=R&usg=AFQjCNGGTo8JmCWDydNA19MrL4aON-02pA&url=http://creativity-online.com/news/chrysler-nokia-target-among-winners-of-teds-first-ad-contest/149189 

注意&&:3其中,&是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&fd=R&usg=AFQjCNGGTo8JmCWDydNA19MrL4aON-02pA&url=http://creativity-online.com/news/chrysler-nokia-target-among-winners-of-teds-first-ad-contest/149189')