mysql中的数据类型
一、SQL中的数据类型分为三大类:数值型、字符串型、时间日期型。
1.数值型分为整数型和小数型。
① 整数型又分为5种:
tinyint — 迷你整型, 1字节,取值范围(无符号)0 ~ 255 或 (有符号)-128 ~ 127;
smallint — 小整型, 2字节, 取值范围(无符号)0 ~ 65535 或(有符号)-32768 ~ 32767;
mediumint — 中等整型, 3字节, 取值范围(无符号)0 ~ 16777215 或(有符号)-8388608 ~ 8388607;
int — 标准整型, 4字节
bigint — 大整型, 8字节
备注:可以使用 unsigned 设置无符号, 默认为有符号;
可以使用 zerofill 设置当位数不够时是否用前导0进行填充;
可以使用 tinyint(1) 做为bool类型使用
类型后面括号中的数字表示显示宽度,通常搭配zerofill一起使用, 当实际宽度 < 显示宽度时, 前面填充0以保证显示宽度。
② 小数型分为浮点型和定点型
浮点型, 超出精度范围后, 会丢失精度(自动四舍五入)
float – 单精度浮点型, 4字节, 精度范围 7 位左右
double – 双精度浮点型, 8字节, 精度范围 15 位左右
使用方式:create table myf(
f1 float, — 小数点后的无效0全部舍去;
f2 float(10,2) — 总长度为10, 小数部分长度为2, 超出部分会四舍五入,
)charset utf8; 整数部分长度为 10 – 2 = 8 位, 插入数据时不能超出, 但允许因系统四舍五入导致的超宽.
定点型, 整数部分不会被四舍五入,但小数部分不保证。
decimal — 可变长度, 大致是每9个数字采用4字节存储, 整数部分与小数部分分开计算
总长度最大值:65 小数部分最大值:30 默认 (10, 2)
整数部分长度不能超过指定宽度, 包括因系统四舍五入导致的超宽也不允许.
小数部分超出长度会四舍五入。
二、时间日期类型
1. datatime – 格式YY-mm-dd HH:ii:ss 范围:1000 ~ 9999年, 有0值:0000-00-00 00:00:00
2. data – datatime 中的data部分
3. time – 时间(段)-时间 ~ +时间
4. timestamp — 时间戳, 从1970年开始的datatime, 不能为空, 有默认值current_timestamp, 当所属条目有任何一项改动时都会自动更新到当前时间。
5. year – 分为year(2) 1970 ~ 2069
year(4)
三、字符串类型
分6种:char, varchar, text, blob, enum, set – mysql记录中:如果有一个字段允许为空, 那么系统会自动从整个记录中保留一个字节来存储NULL,
如果想释放这个字节, 必须保证所有的字段都不允许为NULL。
1. 定长字符串 char(L) — 创建时就需要指定好字符串的长度L, 并且不能改变。L的单位为字符, 长度为255.
2. 变长字符串 varchar(L) — 创建时按指定长度分配空间, 但实际使用情况根据具体数据确定, L的理论长度为65535字符, 但会使用其中 1 ~ 2 个字节存储数据实际长度
但因为mysql规定, 任何一条记录的长度都不能超过65535字节, 所以varchar 永远不可能达到理论长度。
3. 文本字符串, 数据量非常大时使用, 不占用记录长度, 但是会使用记录中的10个字节来存储数据的地址和长度。
text – 存储文字
blob – 存储二进制
4. 枚举 enum(可能出现的元素列表) — 如:enum(\’红色\’,\’绿色\’,\’蓝色\’) , 使用时只能从定义的元素中选择。且只能选择一个.
数据库中实际存储的是按元素定义顺序编号的数字,从1开始。所以插入数据时,可以使用元素列表中的元素名字, 也可以使用对应的数字
5. 集合 set(元素列表) – 使用时可以选择多个, 用逗号分隔。最大数量64
数据库中把每个元素都对应一个二进制位, 选中为1, 否则为0, 二进制顺序反转后的值存储到数据库中。