1、原來一直在使用varchar(n),但不是很清楚這個n的最大值是多少。查了一下
sybase的用戶手冊,n的范圍為
數據庫的頁大小,
即使用select @@maxpagesize查到的數字。
除非設定string_rtruncation on,Adaptive Server將條目截斷到指定列的長度而不加警告或出現錯誤信息。
2、數據庫從cp850遷移到utf-8環境之后,原來的獲取當事人名稱的存儲過程返回的結果有誤,即有名稱被截取的
問題,如下
代碼:
-- 去掉末尾的頓號
set @MC = substring(@MC, 1, len(@MC) - 2)
比如說當事人名稱為“張三、李四、”,在原來的cp850庫返回的結果是“張三、李四。但是升級到utf-8之后,返回的就是“張三、李”。
主要是cp850字符集,一個漢字占兩個
字節,而升級到utf-8之后就占三個字節了,所以這里的減2就不正確了。
執行如下的腳本
declare @MC varchar(100)
declare @length int
set @MC = '張三、李四、'
set @length = len(@MC)
print '%1!', @length
set @MC = substring(@MC, 1, len(@MC) - len('、'))
print '%1!', @MC
在cp850下,print '%1!', @length打印的長度為12,而在utf-8下則返回的是6。當然print '%1!', @MC打印的結果都是"張三、李四"
所以最終把代碼改為如下就正確了,
字符集就不會影響結果。
-- 去掉末尾的頓號
set @MC = substring(@MC, 1, len(@MC) - len('、'))
經常看到數據庫版本限制引起的各種問題,看來有些知識需要普及一下。
除了查手冊外,再提供一種比較方便的方法,可以得到當前ASE服務器上各項限制值。
執行如下命令即可:
dbcc traceon(3604)
go
dbcc serverlimits
go
posted on 2008-09-19 17:05
歲月如歌 閱讀(1293)
評論(0) 編輯 收藏 所屬分類:
db