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