用 tinyint 还是 char(1) ?

phuson 2013-08-07 08:18:22
要存储选择项,如

A.非常满意 B.满意 C.一般 D.不满意

从效率、前台开发的方便性等方面来分析,后台数据库表中用以下三种方案哪种好?
1 char(1) 1 2 3 4
2 char(1) A B C D
3 tinyint 1 2 3 4


...全文
1219 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
發糞塗牆 2013-08-07
  • 打赏
  • 举报
回复
数值型的运算速度会高一点,但是不适合扩展,要是你的选项有很多,那用char会比较好。
KeepSayingNo 2013-08-07
  • 打赏
  • 举报
回复
用tinyint比较好,数值型的肯定比字符型的查询快,而且后续你也可以在这个字段上做一些运算然后实现特别的查询
Neo_whl 2013-08-07
  • 打赏
  • 举报
回复
小弟想问一个比较笨的问题,为啥说char,varchar查询会比int慢,是不是字符类型先要转化为ascii码,再到2进制,而数据直接到2进制,转化时间短点
-Tracy-McGrady- 2013-08-07
  • 打赏
  • 举报
回复
都可以的吧。
Andy__Huang 2013-08-07
  • 打赏
  • 举报
回复
对于2 char(1) A B C D 毫无疑问,使用char类型
Andy__Huang 2013-08-07
  • 打赏
  • 举报
回复
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中有好几种。这个就要选择最恰当的数据类型。
大力水手 2013-08-07
  • 打赏
  • 举报
回复
看两个效率应该是一样的。但是我感觉tinyint可扩展性更强点。 我们公司有一个干了10年的DBA 建立了一列bit 型,程序那边说有-1存在。他又改成了tinyint型。程序那边又说有-1。这封邮件在各部门老大哪转来又转。 DBA不能只为瘦身而不顾扩展。也许瘦身能提高一点性能。但是以后可能会照成很大的麻烦。
phuson 2013-08-07
  • 打赏
  • 举报
回复
引用 5 楼 wwwwgou 的回复:
--都是固定长度,占1个字节。 --前台开发:即见即所得,可能存储A,B,C,D更直观些 --效率:主要看你进行什么样的运算。可能主要是JOIN和ORDER。一般来说用tinyint会好些。 建议:对于这种题类型,一般还会有一个选项表,记录了所有选项。当存储用户答案时,并不会存储A,B,C,D,而是存储USER选中的那个选项ID,然后再和已经设定好的正确选项ID作对比。 如果不涉及到上述问题的话,个人建议用tinyint.
不是考试题,是满意度调查表,所有题都是这四个选项。。需要进行的运算主要是:计算出各选项的百分比。
phuson 2013-08-07
  • 打赏
  • 举报
回复
引用 3 楼 rockyljt 的回复:
[quote=引用 楼主 phuson 的回复:] 从前台开发的方便性等方面来分析
2 char(1) A B C D 更好[/quote] 为什么呢?我倒觉得tinyint好一些,因为至少程序中不用加单引号了
Shawn 2013-08-07
  • 打赏
  • 举报
回复
--都是固定长度,占1个字节。 --前台开发:即见即所得,可能存储A,B,C,D更直观些 --效率:主要看你进行什么样的运算。可能主要是JOIN和ORDER。一般来说用tinyint会好些。 建议:对于这种题类型,一般还会有一个选项表,记录了所有选项。当存储用户答案时,并不会存储A,B,C,D,而是存储USER选中的那个选项ID,然后再和已经设定好的正确选项ID作对比。 如果不涉及到上述问题的话,个人建议用tinyint.
Leon_He2014 2013-08-07
  • 打赏
  • 举报
回复
我觉得tinyint效率高一些
---涛声依旧--- 2013-08-07
  • 打赏
  • 举报
回复
引用 楼主 phuson 的回复:
从前台开发的方便性等方面来分析
2 char(1) A B C D 更好
饮水需思源 2013-08-07
  • 打赏
  • 举报
回复
貌似tinyint效率高些吧
哥眼神纯洁不 2013-08-07
  • 打赏
  • 举报
回复
1、3都行吧
1.管理员 phpcms_admin "No"字段 "类型 "Null"Key"默认值"说明 " ". " " " " " " "2 "username "char(20) "NO " "" 用户名 " "3 "allowmultilogi"tinyint(1) unsigned "NO " "0 " " " "n " " " "允许多人同时使用此帐号登录 " "4 "alloweditpassw"tinyint(1) unsigned "NO " "0 " 允许用户自己更改密码 " " "ord " " " " " "5 "editpasswordne"tinyint(1) unsigned "NO " "0 " 下次登录时必须更改密码 " " "xtlogin " " " " " "6 "disabled "tinyint(1) unsigned "NO " "0 " 锁定帐户 " 2.管理员权根 phpcms_admin_role "No"字段 "类型 "Null"Key"默认值"说明 " ". " " " " " " "2 "roleid "tinyint(3) unsigned "NO "MUL"" 权限ID " 3.管理员权限 phpcms_admin_role_priv "No"字段 "类型 "Null"Key"默认值"说明 " ". " " " " " " "2 "field "char(15) "NO "PRI"" 类型标识 " "3 "value "char(15) "NO "PRI"" 值 " "4 "priv "char(15) "NO "PRI"" 操作动作 " 4.广告 phpcms_ads "No"字段 "类型 "Null"Key"默认值"说明 " ". " " " " " " "2 "adsname "varchar(40) "NO " "" 广告名称 " "3 "introduce "varchar(255) "NO " "" 广告介绍 " "4 "placeid "mediumint(8) unsigned "NO "MUL"0 " 所属广告位 " "5 "type "varchar(10) "NO " "" 广告类型 " "6 "linkurl "varchar(100) "NO " "" 广告链接地址 " "7 "imageurl "varchar(100) "NO " "" 图片地址 " "8 "s_imageurl "varchar(100) "NO " "" 第二张图地址 " "9 "alt "varchar(20) "NO " "" 图片提示 " "10"flashurl "varchar(100) "NO " "" flash地址 " "11"wmode "varchar(20) "NO " "" 是否透明 " "12"text "text "NO " "" 文本内容 " "13"code "text "NO " "" 代码内容 " "14"fromdate "int(10) unsigned "NO "MUL"0 " 广告开始日期 " "15"todate "int(10) unsigned "NO " "0 " 广告结束日期 " "16"username "char(20) "NO "MUL"" 客户帐号 " "17"addtime "int(10) unsigned "NO " "0 " 添加日期 " "18"views "int(10) unsigned "NO " "0 " 浏览次数 " "19"clicks "mediumint(8) unsigned "NO " "0 " 点击次数 " "20"passed "tinyint(1) unsigned "NO " "0 " 是否通过 " "21"status "tinyint(1) unsigned "NO " "1 " 广告状态 " 5.广告位 phpcms_ads_place "No"字段 "类型 "Null"Key"默认值"说明 " ". " " " " " " "2 "placename "char(50) "NO " "" 广告位名称 " "3 "template "char(30) "NO " "0 " 模板 " "4 "introduce "char(100) "NO " "" 广告位介绍 " "5 "price "mediumint(8) unsigned "NO " "0 " 广告价格 " "6 "items "smallint(4) unsigned "NO " "0 " 广告个数 " "7 "width "smallint(4) unsigned "NO " "0 " 广告位宽度 " "8 "h

34,587

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧