python读取数据库数据类型_python数据库数据类型

数字

整数类型:整型的长度约束,实际上没有效果

tinyinit

有负号(默认): -128 ~ 127 超过报错(可以调整sql_mode,让其不报错)

create table 表名(字段名 tinyint);

insert into t1 values (-128);

无符号: 0-255 超过报错(可以调整sql_mode,让其不报错)

create table 表名(字段名 tinyint unsigned);

int

有符号(负号): -2147483648 ~ 2147483647 超过报错(可以调整sql_mode,让其不报错)

create table 表名(字段名 int);

无符号: 0 ~ 4294967295 超过报错(可以调整sql_mode,让其不报错)

create table 表名(字段名 int unsigned);

bigint

有符号: -9223372036854775808 ~ 9223372036854775807 超过报错(可以调整sql_mode,让其不报错)

create table 表名(字段名 bigint);

无符号: 0 ~ 18446744073709551615 超过报错(可以调整sql_mode,让其不报错)

create table 表名(字段名 bigint unsigned);

浮点型:

decimal: 推荐使用,准确的小数值,m最大值为65位(包含d的位数),d最大值为30位小数

create table 表名(字段名 decimal(65,30));

insert into t1 values(1.1111111111111111111111111111111);

float: 随着小数的增多,精度变得不准确,m最大值为256位(包含d的位数),d最大值为30位小数

有符号: -3.402823466E+38 ~ -1.175494351E-38,1.175494351E-38 ~ 3.402823466E+38

create table 表名(字段名 floact(m,d))

无符号:

1.175494351E-38 ~ 3.402823466E+38

double: 随着小数的增多,精度比float要高,但也会变得不准确,m最大值为256位(包含d的位数),d最大值为30位小数

有符号: -1.7976931348623157E+308 ~ -2.2250738585072014E-308,2.2250738585072014E-308 ~ 1.7976931348623157E+308

create table 表名(字段名 double(m,d));

无符号: 2.2250738585072014E-308 ~ 1.7976931348623157E+308

1169701-20190303223537929-459554785.png

字符串:

char(10): 简单粗暴,浪费空间(字符字符串不足10个也存储10个),存取速度快,字符长度范围: 0-255(一个中文是一个字符,是utf8编码的3个字节)

检索: 在检索或者说查询时,查出的结果会自动删除尾部的空格,如果你想看到它补全空格之后的内容,除非我们打开pad_char_to_full_length SQL模式(SET sql_mode = 'strict_trans_tables,PAD_CHAR_TO_FULL_LENGTH';)

varchar: 准确,节省空间,存取速度慢, 字符长度范围: 0-65535(如果大于21845会提示用其他类型 mysql行最大限制为65535字节,字符编码为utf-8

存储: varchar类型存储数据的真实内容,不会用空格填充,如果'ab ',尾部的空格也会被存起来

强调:varchar类型会在真实数据前加1-2Bytes的前缀,该前缀用来表示真实数据的bytes字节数(1-2Bytes最大表示65535个数字,正好符合mysql对row的最大字节限制,即已经足够使用)

如果真实的数据<255bytes则需要1Bytes的前缀(1Bytes=8bit 2**8最大表示的数字为255)

如果真实的数据>255bytes则需要2Bytes的前缀(2Bytes=16bit 2**16最大表示的数字为65535)

检索: 尾部有空格会保存下来,在检索或者说查询时,也会正常显示包含空格在内的内容

length(字段):查看该字段数据的字节长度

char_length(字段):查看该字段数据的字符长度

BINARY 和 VARBINARY 类似于 CHAR 和 VARCHAR,不同的是它们包含二进制字符串而不要非二进制字符串.也就是说,它们包含字节字符串而不是字符字符串,这说明它们没有字符集,并且排序和比较基于列值字节的数值值。

BLOB 是一个二进制大对象,可以容纳可变数量的数据.有 4 种BLOB类型: TINYBLOB、BLOB、MEDIUMBLOB 和 LONGBLOB.它们区别在于可容纳存储范围不同.

有 4 种 TEXT 类型: TINYTEXT、TEXT、MEDIUMTEXT 和 LONGTEXT.对应的这 4 种 BLOB 类型,可存储的最大长度不同,可根据实际情况选择.

BLOB:

1._BLOB和_text存储方式不同,_TEXT以文本方式存储,英文存储区分大小写,而_Blob是以二进制方式存储,不分大小写

2._BLOB存储的数据只能整体读出

3._TEXT可以指定字符集,_BLO不用指定字符集

sql优化建议:创建表时,定长的类型往前放(比如性别),变长的往后放(比如描述信息)

大于255个字符,超了就把文件路径存放在数据库中,(比如视频,数据库中只存路径或url)

1169701-20190303223456668-899087885.png

时间类型:

YEAR: 范围1901 ~ 2155

DATE: 范围1000-01-01 ~ 9999-12-3

TIME: 范围-838:59:59 ~ 838:59:59

DATETIME(一般都用): 范围1000-01-01 00:00:00 ~ 9999-12-31 23:59:59

create table t1(x datetime not null default now()); #获取当前时间

IMESTAMP: 范围1970-01-01 00:00:00 ~ 2037

create table t3(time timestamp);

insert into t3 value(); #插入当前时间

MySQL的这两种日期类型都能够满足我们的需要,存储精度都为秒,下面就来总结一下两种日期类型的区别:

1.DATETIME的日期范围是1001——9999年,TIMESTAMP的时间范围是1970——2038年

2.DATETIME存储时间与时区无关,TIMESTAMP存储时间与时区有关,显示的值也依赖于时区.在mysql服务器,操作系统以及客户端连接都有时区的设置.

3.DATETIME使用8字节的存储空间,TIMESTAMP的存储空间为4字节.因此TIMESTAMP比DATETIME的空间利用率更高

4.DATETIME的默认值为null;TIMESTAMP的字段默认不为空(not null),默认值为当前时间(CURRENT_TIMESTAMP),如果不做特殊处理,并且update语句中没有指定该列的更新值,则默认更新为当前时间

create table 表名(字段名 类型);

create table t2 (d date,t time,dt datetime);

insert into t2 values('1000-01-01','-838:59:59','9999-12-31 23:59:59');

insert into t11 values(now(),now(),now()); #插入当前时间

枚举类型与集合类型

字段的值只能在给定范围中选择,如单选框,多选框,如果你在应用程序或者前端不做选项限制,在MySQL的字段里面也能做限制

enum 单选+只能选枚举范围里的 只能在给定的范围内选一个值

create table t1 (name char(20),gender enum('female','male'));

insert into t1 value('bob','male');

set 多选+去重+只能选在集合里的 在给定的范围内可以选择一个或一个以上的值(爱好1,爱好2,爱好3...)

create table t2 (name char(20),hobby set('抽烟','喝酒','烫头'));

insert into t2 values('jack','喝酒,抽烟,烫头');

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值