<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    szhswl
    宋針還的個人空間
            在今天開發過程中,發現了一查詢結果很怪異,一GOOGLE下才知道是ORACLE對CHAR類型處理的問題,在ORACLE中對CHAR的處理是自動添加空格,比如char(8)存儲'2007-11',則在后面自動添加空格,所以導致以下很多查詢怪異問題(在表test中有字段month為char(8),存儲著'2007-11'一條數據):
            select * from test where month='2007-11'     ---能查出該條數據
            select * from test where month='2007-11    '    ---后面含N個空格,能查出該條數據
            select * from test where month=to_char(to_date('200711','yyyy-mm'),'yyyy-mm')       ---不能查出該條數據
            select * from test where trim(month)=to_char(to_date('200711','yyyy-mm'),'yyyy-mm')   ---能查出該條數據

    這里再比較一下char,varchar,varchar2的區別:
    1.CHAR的長度是固定的,而VARCHAR2的長度是可以變化的, 比如,存儲字符串“abc",對于CHAR (20),表示你存儲的字符將占20個字節(包括17個空字符),而同樣的VARCHAR2 (20)則只占用3個字節的長度,20只是最大值,當你存儲的字符小于20時,按實際長度存儲。
    2.CHAR的效率比VARCHAR2的效率稍高。
    3.目前VARCHAR是VARCHAR2的同義詞。工業標準的VARCHAR類型可以存儲空字符串,但是oracle不這樣做,盡管它保留以后這樣做的權利。Oracle自己開發了一個數據類型VARCHAR2,這個類型不是一個標準的VARCHAR,它將在數據庫中varchar列可以存儲空字符串的特性改為存儲NULL值。如果你想有向后兼容的能力,Oracle建議使用VARCHAR2而不是VARCHAR。 

    何時用char?何時用varchar2?
               CHAR與VARCHAR2是一對矛盾的統一體,兩者是互補的關系.
    VARCHAR2比CHAR節省空間,在效率上比CHAR會稍微差一些,即要想獲得效率,就必須犧牲一定的空間,這也就是我們在數據庫設計上常說的‘以空間換效率’。
       VARCHAR2雖然比CHAR節省空間,但是如果一個VARCHAR2列經常被修改,而且每次被修改的數據的長度不同,這會引起‘行遷移’(Row Migration)現象,而這造成多余的I/O,是數據庫設計和調整中要盡力避免的,在這種情況下用CHAR代替VARCHAR2會更好一些。

    個人意見是使用varchar2,因為用char總要特別注意自動添加空格的問題,粗粗說一下這個問題,有什么錯誤還請指教。


    ---------------------------------------------------------------------------------------------------------------------------------
    說人之短,乃護己之短??浼褐L,乃忌人之長。皆由存心不厚,識量太狹耳。能去此弊,可以進德,可以遠怨。
    http://www.tkk7.com/szhswl
    ------------------------------------------------------------------------------------------------------ ----------------- ---------
    posted on 2007-12-11 15:18 宋針還 閱讀(2185) 評論(3)  編輯  收藏

    FeedBack:
    # re: oracle的char類型對空格的怪異處理
    2007-12-12 10:29 | jeasonzhao
    我覺得,為了安全起見,還是實現varCHAR,因為最終這個Trim的操作還是要做的,不管是客戶端還是SQL語句,都會帶來性能開銷,與其這樣,還不如從源頭上掐斷  回復  更多評論
      
    # re: oracle的char類型對空格的怪異處理
    2008-01-08 12:25 | 肖遙
    日期用char存本來就是你的不對了  回復  更多評論
      
    # re: oracle的char類型對空格的怪異處理
    2008-02-21 08:51 | yangzl
    樓上不要只盯住日期的問題,其實varchar2和char的匹配確實存在問題的  回復  更多評論
      

    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 波多野结衣一区二区免费视频| 在线a级毛片免费视频| 香蕉视频免费在线| eeuss影院www天堂免费| 你是我的城池营垒免费看 | 成人亚洲综合天堂| 国产91精品一区二区麻豆亚洲 | 女人被男人桶得好爽免费视频| 免费看AV毛片一区二区三区| 免费中文字幕在线观看| 伊人久久精品亚洲午夜| 亚洲精品美女在线观看| 亚洲国产成人无码AV在线| h视频在线观看免费| 在线观看的免费网站无遮挡| 日日AV拍夜夜添久久免费| 亚洲成AV人片在WWW色猫咪| 亚洲国产精品日韩在线| 精品熟女少妇aⅴ免费久久 | 国产AV无码专区亚洲AV麻豆丫| 在线视频网址免费播放| 色窝窝免费一区二区三区| 国产日产亚洲系列最新| 亚洲人成77777在线播放网站不卡 亚洲人成77777在线观看网 | 人妻无码中文字幕免费视频蜜桃| 99精品免费观看| 久久精品国产亚洲一区二区三区 | 亚洲av永久无码天堂网| 222www免费视频| 国产亚洲精品xxx| 人人公开免费超级碰碰碰视频| 91频在线观看免费大全| 亚洲精品日韩专区silk| 精品国产免费一区二区三区香蕉| 亚洲国产精品成人一区| 色偷偷亚洲第一综合| 国产裸模视频免费区无码| 亚洲伊人久久大香线蕉结合| av免费不卡国产观看| 国产成人精品日本亚洲直接| 一二三四免费观看在线视频中文版 |