用 tinyint 还是 char(1) ? 要存储选择项,如A.非常满意 B.满意 C.一般 D.不满意 从效率、前台开发的方便性等方面来分析,后台数据库表中用以下三种方案哪种好?1 char(1) 1 2 3 42 char(1) A B C D3 tinyint 1 2 3 4 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 2 char(1) A B C D 更好 --都是固定长度,占1个字节。--前台开发:即见即所得,可能存储A,B,C,D更直观些--效率:主要看你进行什么样的运算。可能主要是JOIN和ORDER。一般来说用tinyint会好些。建议:对于这种题类型,一般还会有一个选项表,记录了所有选项。当存储用户答案时,并不会存储A,B,C,D,而是存储USER选中的那个选项ID,然后再和已经设定好的正确选项ID作对比。如果不涉及到上述问题的话,个人建议用tinyint. 2 char(1) A B C D 更好为什么呢?我倒觉得tinyint好一些,因为至少程序中不用加单引号了 看两个效率应该是一样的。但是我感觉tinyint可扩展性更强点。 我们公司有一个干了10年的DBA 建立了一列bit 型,程序那边说有-1存在。他又改成了tinyint型。程序那边又说有-1。这封邮件在各部门老大哪转来又转。 DBA不能只为瘦身而不顾扩展。也许瘦身能提高一点性能。但是以后可能会照成很大的麻烦。 SQL server数据库数据类型tinyint,smallint,int和bigint的区别 一、类型比较 bigint:从-2^63(-9223372036854775808)到2^63-1(9223372036854775807)的整型数据,存储大小为 8 个字节。一个字节就是8位,那么bigint就有64位 www.2cto.com int:从-2^31(-2,147,483,648)到2^31-1(2,147,483,647)的整型数据,存储大小为 4 个字节。int类型,最大可以存储32位的数据 smallint:从-2^15(-32,768)到2^15-1(32,767)的整数数据,存储大小为 2 个字节。smallint就是有16位 tinyint:从0到255的整数数据,存储大小为 1 字节。tinyint就有8位。 二、注释 在支持整数值的地方支持 bigint 数据类型。但是,bigint 用于某些特殊的情况,当整数值超过int 数据类型支持的范围时,就可以采用 bigint。在 SQL Server 中,int 数据类型是主要的整数数据类型。 在数据类型优先次序表中,bigint 位于 smallmoney 和 int 之间。 只有当参数表达式是 bigint 数据类型时,函数才返回 bigint。SQL Server 不会自动将其它整数数据类型(tinyint、smallint 和 int)提升为 bigint。 www.2cto.com 三、总结 所以选择最恰当的数据类型是非常重要的,例如,给你10个18位的全是数字的身份证号码,和10个15位的全是数字的身份证号码。让你以最快的查询的速度查找出来,这20个记录,那么你在设计这个字段的时候,应该有几个地方要注意: 1. 最快的查询速度,无非我们选择int类型的数据来存储这20个身份证号码。但是15位和18位的数据貌似只有bigint才满足条件。 2. 有人要说为啥不用varchar或者char呢。直接存成一个字符串。这个问题问的比较好,首先,int的查询速度肯定比varchar和char要快,那么int类型的数据是首选,但是int在sqlserver中有好几种。这个就要选择最恰当的数据类型。 对于2 char(1) A B C D 毫无疑问,使用char类型 小弟想问一个比较笨的问题,为啥说char,varchar查询会比int慢,是不是字符类型先要转化为ascii码,再到2进制,而数据直接到2进制,转化时间短点 用tinyint比较好,数值型的肯定比字符型的查询快,而且后续你也可以在这个字段上做一些运算然后实现特别的查询 数值型的运算速度会高一点,但是不适合扩展,要是你的选项有很多,那用char会比较好。 关于sql server case when ..else ..end结果类型的小议 请教高手关于sp_adduser和sp_grantdbaccess的问题 怎样去掉重复行? 以下两个SQL语句哪个更符合SQL-92标准? 如何在MS-SERVER2000中修改text类型数据的长度 触发器多表更新问题 如何获取表中相同的记录有多少条。 如何快速的更新到数据库 百万数据库访问和更新问题? 有关触发器的小问题? 数据迁移方案讨论--欢迎大家赐教 sql2008如何用存储过程逐行读入txt文件啊
--前台开发:即见即所得,可能存储A,B,C,D更直观些
--效率:主要看你进行什么样的运算。可能主要是JOIN和ORDER。一般来说用tinyint会好些。
建议:对于这种题类型,一般还会有一个选项表,记录了所有选项。当存储用户答案时,并不会存储A,B,C,D,而是存储USER选中的那个选项ID,然后再和已经设定好的正确选项ID作对比。
如果不涉及到上述问题的话,个人建议用tinyint.
为什么呢?我倒觉得tinyint好一些,因为至少程序中不用加单引号了
一、类型比较
bigint:从-2^63(-9223372036854775808)到2^63-1(9223372036854775807)的整型数据,
存储大小为 8 个字节。一个字节就是8位,那么bigint就有64位 www.2cto.com
int:从-2^31(-2,147,483,648)到2^31-1(2,147,483,647)的整型数据,存储大小为 4 个字节。
int类型,最大可以存储32位的数据
smallint:从-2^15(-32,768)到2^15-1(32,767)的整数数据,存储大小为 2 个字节。
smallint就是有16位
tinyint:从0到255的整数数据,存储大小为 1 字节。tinyint就有8位。
二、注释
在支持整数值的地方支持 bigint 数据类型。但是,bigint 用于某些特殊的情况,当整数值超过
int 数据类型支持的范围时,就可以采用 bigint。在 SQL Server 中,int 数据类型是主要的整数数据类型。
在数据类型优先次序表中,bigint 位于 smallmoney 和 int 之间。
只有当参数表达式是 bigint 数据类型时,函数才返回 bigint。SQL Server 不会自动将其它整数数据类型(tinyint、smallint 和 int)提升为 bigint。 www.2cto.com
三、总结
所以选择最恰当的数据类型是非常重要的,例如,给你10个18位的全是数字的身份证号码,
和10个15位的全是数字的身份证号码。让你以最快的查询的速度查找出来,这20个记录,
那么你在设计这个字段的时候,应该有几个地方要注意:
1. 最快的查询速度,无非我们选择int类型的数据来存储这20个身份证号码。
但是15位和18位的数据貌似只有bigint才满足条件。
2. 有人要说为啥不用varchar或者char呢。直接存成一个字符串。这个问题问的比较好,
首先,int的查询速度肯定比varchar和char要快,那么int类型的数据是首选,
但是int在sqlserver中有好几种。这个就要选择最恰当的数据类型。
毫无疑问,使用char类型