题目有点儿长,本来还想加上char和nchar,感觉都乱套了,就没有加。
想到这个话题,是因为今天在设计sqlserver数据库的时候,忽然卡在这里很久,这么多种有关字符串的类型,到底要选择哪一种呢?特别是升级到2005之后,又多了一种max来搅局,更让人有些无所适从。
在讨论正式话题之前,还是先说说天气吧,因为这几天实在是太冷了。虽然对于北方的朋友来说这实在算不了什么,但冷其实是一种相对的感觉。0下10度相对于20度是冷,10度相对于30度也是冷,如果0下10度再往下,可能也就麻木了,反正就是那种感觉了。回忆起小时候取暖的方法,不知道大家经历过没有。一是斗鸡,就是单脚着地,抱着另一只脚,分班互相攻击,双脚落地即输,斗一身汗再去上课,就不会冷了。二是“挤窝窝”,一堆人挤在墙角,互相取暖。三是烧煤炉,每个班分点煤,然后找些黄泥,和成煤饼晒干,每天早上把炉子生起来,虽然炉火很小,但整个教室依然暖洋洋的感觉,一下课大家都会跑到炉子旁边,让自己更暖和一些。
回忆一下感觉温暖了不少,搓搓冰冷的双手继续这个话题。
有时候偷懒,只要是字符型的都用varchar类型,然后指定一个足够的长度就行了。感觉这样一般也没啥问题,但对于一个严谨的程序员来说可能就不应该了,有些事情还是要认真一些,哪怕只是提高一点点性能,也应该往这方面努力。因为任何一个小小的疏忽,可能在某个条件下就变成了大大的麻烦。这里虽然看起来很乱,但只要稍微理一下,就很清楚了,下面我就来简单做个梳理。
先来看char和nchar,这分别用于非Unicode字串和Unicode字符数据,定长的。如果你的数据长度已知是固定的,可以采用这个类型,如果字母或数字或它们的组合,如学号001,产品代码A001,就用char,如果是中文的,如性别男或女,就可用nchar。
再来看看varchar和nvarchar,这个是变长的,也就是说指定的长度只是一个最大值,字串长度小于这个值都是可以的。比如身份证号,一般是18位数字,也有些老的没改过来的是15位数字,这个字段类型可用varchar(18),如果是用来博客文章的标题,可能是中文的也可能有英文,这咋弄呢?这种情况定义成varchar和nvarchar都成,长度可以适当放宽一点,但在输入校验的时候要注意一些,因为对于varchar来说,中文这种双字节也是可以保存的,但是做为两个字节的,而nvarchar,无论中文和数字都占两个字节的。如果中文为主,那就干脆用nvarchar算了。
对于varchar(max)和nvarchar(max),原来还以为只是对varchar和nvarchar的扩展,后来才发现不仅如此,更是用来替换text和ntext的。在2005以前的版本中,对于长文本比如文章的正文,当然要选择text或ntext了,一般都选ntext吧。升级到2005后,微软可能更推荐你选用varchar(max)或nvarchar(max),因为这样可以利用varchar类型的所有好处,如游标、字符串函数等,具体可以查询联机文档。对于我们来说,一般还是选择nvarchar(max)吧,比如统计字数的时候,也能更准确一些。
手脚有些麻木,造成大脑可能也有些麻木,等天暖和了再说吧。
******