sql server中的一個坑-len與datalength區別

datapeng發表於2019-06-06

今天在處理問題時,統計一個欄位最大位元組數時,出現了問題:

select max(len(subject_name)) from dbtabletest;

但返回值為129。

但在oracle端始終出現報錯,說插入字元數過大,真是奇葩。

搞了半天,就把這個subject_name,複製出來,在文字編輯器中發現了有一行值後面有太多空格。直到現在才知道,需要使用datalength才能統計到結尾的空格,真是又被sql server坑了一把。

還好,最終找到問題了!

當採用非Unicode編碼時,即varchar型別的字串時,DataLength()和Len()的區別:

1、空格處理

Len() 字串表示式的字元數,不計尾部空格,但計頭部空格和中間的空格;

DataLength() 任何表示式的位元組數,包括空格

2、對於漢字的處理

區別在於Len只返回字元數,一個漢字代表一個字元。Datalength返回的是位元組數,一個漢字兩個位元組。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29371470/viewspace-2646973/,如需轉載,請註明出處,否則將追究法律責任。

相關文章