一、数据类型
二、数值类型
三、越界检验
在mysql中,整形可以指定为有符号和无符号的,默认是有符号的;
所以插入数值128时出现了越界错误。
我们可以通过UNSIGNED来说明某个字段是无符号的。
示例如下:
四、关于UNSIGNED
首先我们来看一个例子,先建立一个表:
现在若执行a-b会有什么结果呢?会得到-1吗?我们来验证一下:
结果出错了,其实在内存中都是ffffffff,只是ffffffff可以代表两种值:对于无符号的整数值,其是整数的最大值,即4294967295;对于有符号数来说,第一位代表符号位,如果是1,表示的是负数,这时应该是取反加1得到的负数值,即-1。
要想得到-1,我们需要对SQL_MODE这个参数进行设置即可:
如此便得到了-1;
五、bit的使用
基本语法:bit[M] 位字段类型。
其中M表示每个值的位数,范围是1~64,如果M被忽略了,则默认为1。
一个栗子:
会发现a对应的数据10没有显示,那是因为ASCII 10对应的是换行,所以换行了,并没有显示数据10。
再插入一条数据,观察其特性:
通过这我们可以发现:
bit字段在显示时,是按照ASCII对应的值显示。
并且当只需要存放0或1时,我们就可以定义bit(1),这样会很节省空间。
六、小数的基本使用
1、float
float[(m,d)][unsigned]
M指定显示长度,d指定小数位数,占用4个字节空间。
**小数:**float(4,2)可以表示的范围是-99.99~99.99,MySQL在保存值时会进行四舍五入
示例如下:
如果float(4,2)是有符号的,则表示范围是-99.99 ~ 99.9,如果定义的是float(4,2) unsigned 这时,因为把它指定为无符号的数,范围是 0 ~ 99.99
2、decimal
语法格式:decimal(m,d)[unsigned]
定点数m指定长度,d表示小数点的位数
decimal和float很像,但是有区别:
float和decimal表示的精度不一样,float表示的精度大约是7位,decimal整数最大位数m为65。支持小数最大位数d是30。如果d被省略,默认为0.如果m被省略,默认
是10。
一个栗子:
我们会发现decimal的精度更加准确,因此如果我们希望某个数据表示高精度,则可以选择decimal。
七、字符串
char(L): 固定长度字符串,L是可以存储的长度,单位为字符,最大长度值可以为255
varchar(L): 可变长度字符串,L表示字符长度,最大长度65535个字节
1 char=3 byte
char测试:
我们可以发现:
(1)char(2) 表示可以存放两个字符,可以是字母或汉字,但是不能超过2个,超过部分会被丢失
(2)最多只能是255
测试varchar
关于varchar(len),len到底是多大,这个len值,和表的编码密切相关:
varchar长度可以指定为0到65535之间的值,但是有1 - 3 个字节用于记录数据大小,所以说有效字节数是65532。当我们的表的编码是utf8时,varchar(n)n最大值是65532/3=21844[因为utf中,一个汉字占用3个字节],如果编码是gbk,varchar(n)n最大是65532/2=32766(因为gbk中,一个汉字占用2字节)。
选择char和varchar规则:
(1)如果数据确定长度都一样,就使用定长,比如身份证,手机号,md5加密的密码… …
(2)如果数据长度有变化,就使用变长,比如,名字,地址,但是你要保证最长的能存的进去。
(3)定长的磁盘空间比较浪费,但是效率高。
(4)变长的磁盘空间比较节省,但是效率低。