2011-03-07 133 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')