对于很多新手来说,经常被类型搞得晕头转向,今天我用通俗易懂的解释帮大家理解这些类型。
在数据库字段类型定义中,可以分为两大类,一类为unicode类型,另一种就是非unicode。
unicode的编码方式与iso10646的通用字元集(亦称[通用字符集])(universal character set,ucs)概念相对应,
目前的用于实用的unicode版本对应于ucs-2,使用16位的编码空间,也就是每个字符占用2个字节。
简单来说就是中文类型和非中文类型,个人喜欢把英文,数字,特殊符号定为非中文类型,其余的均定为中文类型。
想了解unicode的可以去详细了解一下,这里不多做赘述,直接上干货:
char(n) , varchar(n) 表示按字节存储数据,nvarchar(n),nchar(n) 表示按字符存储数据。
char,varchar 最多8000个英文,4000个汉字
nchar,nvarchar 可存储4000个字符,无论英文还是汉字
列子:
“你好hello”
char占用空间:2*2 5=9个字节
nvarchar占用空间:7*2=14个字节
使用varchar存储含有非英文字符(比如中文,日文)时出现“??”的乱码,用nvarchar这则不会出现
可见,各有各的优点,那该怎么选择呢?
如果字段存储内容都是英文字符而没有汉字和其他语言符号,建议使用varchar,或char;
含有汉字的使用nvarchar,因为nvarchar是使用unicode编码,即统一的字符编码标准,会减少乱码的出现几率;
个人一般建议,主键用char(char(10),和char(13)除外,卖个关子,自己去体会),
前提是你是自己编写的主键,带有英文字母和数字的混合字符串主键,如果是用int型自增主键则忽略
如果是英文类型字段,用varchar,如英文名,文件名/地址,用户名等
其他的字段,如描述,备注,说明等可采用nvarchar。
其他类型,sql server 类型参考表:
字段类型 | 描述 |
bit | 0或1的整型数字 |
int | 从-2^31(-2,147,483,648)到2^31(2,147,483,647)的整型数字 |
smallint | 从-2^15(-32,768)到2^15(32,767)的整型数字 |
tinyint | 从0到255的整型数字 |
decimal | 从-10^38到10^38-1的定精度与有效位数的数字 |
numeric | decimal的同义词 |
money | 从-2^63(-922,337,203,685,477.5808)到2^63-1(922,337,203,685,477.5807)的货币数据,最小货币单位千分之十 |
smallmoney | 从-214,748.3648到214,748.3647的货币数据,最小货币单位千分之十 |
float | 从-1.79e 308到1.79e 308可变精度的数字 |
real | 从-3.04e 38到3.04e 38可变精度的数字 |
datetime | 从1753年1月1日到9999年12日31的日期和时间数据,最小时间单位为百分之三秒或3.33毫秒 |
smalldatetime | 从1900年1月1日到2079年6月6日的日期和时间数据,最小时间单位为分钟 |
timestamp | 时间戳,一个数据库宽度的唯一数字 |
uniqueidentifier | 全球唯一标识符guid |
char | 定长非unicode的字符型数据,最大长度为8000 |
varchar | 变长非unicode的字符型数据,最大长度为8000 |
text | 变长非unicode的字符型数据,最大长度为2^31-1(2g) |
nchar | 定长unicode的字符型数据,最大长度为8000 |
nvarchar | 变长unicode的字符型数据,最大长度为8000 |
ntext | 变长unicode的字符型数据,最大长度为2^31-1(2g) |
binary | 定长二进制数据,最大长度为8000 |
varbinary | 变长二进制数据,最大长度为8000 |
image | 变长二进制数据,最大长度为2^31-1(2g) |
今天的分享到此结束,有需要的可以关注留言讨论
能帮朋友解决问题的记得给个关注支持一下,以后将多多分享sql server 相关知识