歲月如哥
          人生非夢
          posts - 50,comments - 144,trackbacks - 0
          1、原來一直在使用varchar(n),但不是很清楚這個n的最大值是多少。查了一下sybase的用戶手冊,n的范圍為數據的頁大小,
             即使用select @@maxpagesize查到的數字。
           
          除非設定string_rtruncation on,Adaptive Server將條目截斷到指定列的長度而不加警告或出現錯誤信息。
          2、數據庫從cp850遷移到utf-8環境之后,原來的獲取當事人名稱的存儲過程返回的結果有誤,即有名稱被截取的問題,如下代碼: 
           
          -- 去掉末尾的頓號
              set @MC = substring(@MC1len(@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(@MC1len(@MC- len(''))
          print '%1!'@MC
          在cp850下,print '%1!', @length打印的長度為12,而在utf-8下則返回的是6。當然print '%1!', @MC打印的結果都是"張三、李四"
            所以最終把代碼改為如下就正確了,字符集就不會影響結果。
          -- 去掉末尾的頓號
              set @MC = substring(@MC1len(@MC- len(''))
          經常看到數據庫版本限制引起的各種問題,看來有些知識需要普及一下。
          除了查手冊外,再提供一種比較方便的方法,可以得到當前ASE服務器上各項限制值。
          執行如下命令即可:
          dbcc traceon(3604)
          go
          dbcc serverlimits
          go
          posted on 2008-09-19 17:05 歲月如歌 閱讀(1280) 評論(0)  編輯  收藏 所屬分類: db
          主站蜘蛛池模板: 莒南县| 舟山市| 湘潭市| 蒲江县| 和田县| 西乌| 湘潭县| 长寿区| 灵宝市| 新田县| 兴仁县| 屏南县| 房山区| 罗定市| 凤阳县| 榆树市| 平利县| 大理市| 黎平县| 阿巴嘎旗| 屯门区| 富裕县| 阿坝县| 军事| 新巴尔虎左旗| 荣昌县| 武定县| 嘉义县| 延寿县| 沅陵县| 鹤壁市| 慈利县| 张家界市| 黑水县| 河南省| 浮梁县| 旅游| 布拖县| 凤阳县| 寻甸| 达州市|