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


字符串:
    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)

时间类型:
    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','喝酒,抽烟,烫头');


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM