从 String or binary data would be truncated 错误深入到数据库设计

从 String or binary data would be truncated 异常深入到数据库设计

    "所有的进步都是不稳定的,一个问题解决了,我们不得不面对又一个新问题。"

                                                                  ------马丁*路德*金

 

   "String or binary data would be truncated" 属于SQLException,产生原因是需要插入的字段长度大于数据库表中对应的字段长度,数据库放不下该数据。解决方法就是把数据库中的字段长度扩大。问题就出来了:要扩大到多少才适合呢?   

 

     最近的项目用的是sqlserver数据库,sqlserver数据库存在char,varchar和nvarchar三种字符串类型,小小试了一下。结果发现:一般来说,如果含有中文字符,用nchar/nvarchar,如果纯英文和数字,用char/varchar。char是定长类型,一般用来存储状态字段char(1)。比如char(25),不管你存储的数据是否达到了25个字节,都会占去25个字节空间,不足的字节空间会使用空格补足。varchar是char的可变类型, VARCHAR 类型可以根据实际内容动态改变存储值的长度,所以在不能确定字段需要多少字符时使用 VARCHAR 类型可以大大地节约磁盘空间、提高存储效率。nvarchar表示存储的是unicode数据类型的字符,最大长度是4000个字符。我们知道字符中,一般一个字符等于两个字节,一个英文字母是占一个字节,一个汉字占两个字节。unicode的产生就是为了解决字符集不兼容问题,它规定所有字符都等于两个字节。即汉字和一个英文字母一样,都只占一个字符,两个字节。通俗点说,nvarchar类型最大可以存4000个汉字或者4000个英文字母。而char和varchar最多能存储4000个汉字或者8000个英文字母。比如说产品名称最大只能输入25个汉字,那么后台数据库表就可以设计成nvarchar(25)就搞定了。