SET类型的存储需求问题

SET类型的存储需求问题

SET最多只有64个成员,为什么需要1、2、3、4或8个字节,64个成员一个字节不就足够了吗?



正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
芝芝兰兰 2019-10-28 17:04:22

同学你好。因为SET的每个选项值相当于对应一个二进制位

第1个选项、第二个选项、第三个选项、第四个选项...,依次是用2的0,1,2,3 ... 64次方表示的

转换为二进制是 0000 0001(1=2的0次方),0000 0010(2=2的1次方),0000 0100(4=2的2次方),0000 1000(8=2的3次方)

一个字节最多表示到第1000 0000(128=2的7次方)也就是第8个选项。

所以要表示64个需要8个字节,也就是 8*8 位呢~

之所以这么表示,是为了设置SET选项方便。由于SET选项本身就是可以多选的,设置SET类型的值的时候,可以借用10进制数转为2进制来表示是哪些选项,如想要设置C、D、E,转换为二进制为0001 1100,即设置SET值为28同样可以得到CDE的结果http://img1.sycdn.imooc.com//climg/5db6ae0b095e7bde08370318.jpg

http://img1.sycdn.imooc.com//climg/5db6af14093a8f2704010226.jpg


如果解答了同学的疑问,望采纳~

祝学习愉快~


  • 提问者 慕沐8221787 #1
    SET的每个选项值相当于对应一个二进制位?按照你上面举的例子,‘A’,'B','C',...,难道‘A’相当于一个二进制位吗?这个解释令人费解。 什么叫相当于?
    2019-10-28 17:28:21
  • 芝芝兰兰 回复 提问者 慕沐8221787 #2
    同学你好。“相当于”就是“看做是”或“用它替代”的意思。选项值“相当于”二进制位,就是指选项可以使用二进制值来代表的意思。在定义了列a SET('A','B','C','D','E','F')后,在MySQL看来,第一个位置的选项 'A' 就是 二进制数 0001 。同理1就是第一个位置的选项 'A' 。就像给这些选项都起了小名或者编号一样,'A' 就是大名,1就是小名。INSERT test_set(a) VALUES('A'); 就等价于 INSERT test_set(a) VALUES(1); 如果解答了同学的疑问,望采纳~祝学习愉快~
    2019-10-28 18:18:28
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
Java数据库开发与实战应用2018版
  • 参与学习           人
  • 提交作业       277    份
  • 解答问题       4297    个

Java数据库开发的必备技能,从流行的MySQL数据库开始,到Java原生的数据库管理接口JDBC的使用,再到常用的数据持久化框架MyBatis,让你向Java工程师的目标又迈进了一步!

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师