网站怎么做自然优化,有哪些做婚礼平面设计的网站,专业网络公司报价,商标名字大全10000个文章目录一、数据类型分类二、数值类型1. tinyint 类型2. bit 类型3. int 类型4. float 类型5. decimal 类型三、字符串类型1. char 类型2. varchar 类型3. char 和 varchar 比较4.日期和时间类型5. enum 和 set一、数据类型分类 数据类型本质也是一种约束#xff01; 如果插入…
文章目录一、数据类型分类二、数值类型1. tinyint 类型2. bit 类型3. int 类型4. float 类型5. decimal 类型三、字符串类型1. char 类型2. varchar 类型3. char 和 varchar 比较4.日期和时间类型5. enum 和 set一、数据类型分类 数据类型本质也是一种约束 如果插入的数据不满足约束条件直接终止 换个角度就意味着如果满足约束条件就允许插入。 再换个角度就意味着给表中的数据提供了极大的确定性。 二、数值类型
如果插入的数据越界了SQL 会直接终止这就是数据类型约束了 SQL 的执行。
换言之能插入的数据一定是范围之内的数据。
1. tinyint 类型
tinyint [unsigned]带符号范围[-128, 127]无符号范围[0, 255]。默认有符号tinyint unsigned 类型 2. bit 类型
bit[(m)]位类型m指定位数范围[1,64]。若m被忽略默认为1bit 字段在显示时是按照 ASCII 码对应的值显示的。 10 是控制字符。 65 对应字符 ‘A’ 。 如果我们有这样的值只存放 0 或 1这时可以定义 bit(1) 。因为这样可以节省空间。 1 和 0 都是控制字符。 3. int 类型
int [unsigned]带符号范围[-2^31, 2^31-1]无符号范围[0, 2^32-1]。默认有符号4. float 类型
float[(m, d)] [unsigned]m指定显示长度d指定小数位数float(4,2) 表示的范围是 [-99.99, 99.99]MySQL 在保存 float 值时会进行四舍五入。 float unsigned 类型 float(4,2) unsigned 表示的范围是 [0, 99.99]负数直接不让插入。 5. decimal 类型
decimal[(m, d)] [unsigned]m指定长度d指定小数位数decimal(4,2) 表示的范围是 [-99.99, 99.99]MySQL 在保存 decimal 值时会进行四舍五入。 decimal unsigned 类型 decimal(4,2) unsigned 表示的范围是 [0, 99.99]负数直接不让插入。 decimal 和 float 很像但是有区别两者表示的精度不一样decimal 表示的精度更高。 如果希望小数的精度高推荐使用 decimal 。
三、字符串类型
1. char 类型
char(L)固定长度字符串L是可以存储的长度单位为字符。L的最大长度值是255char(2) 表示可以存放两个字符可以是字母或汉字但是不能超过 2 个。 注 ① 在概念上字符 ! 字节。 ② 在不同的编码格式中汉字字符所占的字节数不一定相等。 2. varchar 类型
varchar(L)可变长度字符串L表示字符长度。最大长度为65535个字节说明关于 varchar(L)L 到底是多大跟表的编码格式密切相关。 ① varchar 的长度字节可以指定为 [0, 65535] 之间的值但是有 1 - 3 个字节用于记录数据大小所以有效字节数是 65532 。 ② 当表的编码是 utf8 时varchar(L) 的参数 L 最大值是 65532/321844因为在 utf8 中一个字符占用 3 个字节。如果编码是 gbkvarchar(L) 的参数 L 最大值是 65532/232766因为在 gbk 中一个字符占用 2 个字节。 注这里采用的默认字符集是 utf8 。 3. char 和 varchar 比较
实际存储char(4)varchar(4)char占用字节varchar占用字节呵呵哈哈呵呵哈哈呵呵哈哈4*3124*3113嘿嘿嘿4*3121*314嘻嘻嘻嘻嘻××数据超过长度数据超过长度
如何选择定长或变长字符串
如果数据确定长度都一样就使用定长char比如身份证、手机号、md5 。如果数据长度有变化就使用变长varchar但是要保证最长的能存得进去比如名字、地址。定长的磁盘空间比较浪费但是效率高。变长的磁盘空间比较节省但是效率低。定长的意义是直接开辟好对应的空间。变长的意义是在不超过自定义范围的情况下用多少开辟多少。
4.日期和时间类型
常用的有如下三个
date日期格式为 yyyy-mm-dd占用三字节
datetime时间日期格式为 yyyy-mm-dd HH:ii:ss占用八字节
timestamp时间戳格式为 yyyy-mm-dd HH:ii:ss占用四字节若插入数据时不插入 timestamp 列则会自动补上当前的时间戳。 更新数据时间戳会自动更新成当前的时间戳。 5. enum 和 set
enum枚举“单选”类型
enum(选项值1, 选项值2, 选项值3, ...)说明 ① 该设定只是提供了若干个选项的值只允许多选一。 ② 最终一个单元格中实际只存储了其中一个值而且出于效率考虑实际存储的是数字这些选项的每个选项值依次对应数字 1, 2, 3, …最多 65535 个。因此当我们插入枚举值时除了可以通过选项值来设置之外还可以通过数字来设置。 set集合“多选”类型
set(选项值1, 选项值2, 选项值3, ...)说明 ① 该设定只是提供了若干个选项的值可允许多选多。 ② 最终一个单元格中实际存储了其中任意多个值而且出于效率考虑实际存储的是数字这些选项的每个选项值依次对应数字 1, 2, 4, …最多 64 个。因此当我们插入集合值时除了可以通过选项值来设置之外还可以通过数字来设置。 ③ 集合中的每个选项值分别对应一个比特位。 若插入的数据超过枚举或集合的范围则不进行插入直接报错。
严重不建议在插入枚举值或集合值的时候采用数字的方式因为不便于阅读 enum 通过数字的方式进行插入或查询。 set 通过数字的方式进行插入集合中的每个选项值分别对应一个比特位。 如果对集合直接进行查询只会严格匹配。 比如我们想查找爱好 “包含” 游泳的人的信息但查询结果是爱好 “只有” 游泳的人的信息这不符合我们的要求。 对集合进行查询可使用find_in_set函数。 比如我们想查找爱好 “包含” 游泳的人的信息可使用该函数来进行查找。