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