Python 39 数据库的数据类型

一:整型

为什么需要 数据分类?  

1、为了描述事物更加准确  

2、描述起来更方便  

3、节省内存空间     

例:1 a 你     utf8 下 5个字节   

      1 a b c   unicode 6个字节

mysql支持的数据类型

整型:从小到大有tinyint(***)    smallint(***)    mediumint(***)    int(*****)    bigint(***)  

字节数:     分别占了    1                   2                    3                      4              8   个字节  

默认情况下整型是有符号的,需要用一个二进制位存储符号  

给整型加上约束 unsigned 来表示无符号  

如果数据超出范围就尽可能保存最大的,例如 在无符号保存256,其实存的255  

如果有符号 例如tinyint 保存-1280 其实存的是-128 是最小值

 修改严格模式:

 以上特性的出现是因为mysql处于非严格模式:出现错误不会保存,会尝试自己去修改错误     

查看当前模式 show variables like "sql_mode";     

修改为严格模式 set variables sql_mode="STICT_TRANS_TABLBS";  

默认是严格模式,在严格模式下,如果超出范围就直接报错,在一些版本中默认就是严格模式!     

在我们的正常开发中,我们应该先判断数据的正确性,没有问题在发给数据库

 怎么选择:得根据实际情况来判断,能够保存你的数据的最小类型

 长度限制对于整型的意义:     

create table t10 value(id int(1));     

insert into t10 value(4545555);     

select *from t10;     

发现这个数也存储成功,说明这里长度指的不是存储容量限制,而是显示的宽度,如果你的数据超过了显示宽度有几个显示几个,如果不足 则补全到指定长度 得告诉它用什么来补全     

create table t13(id int(10) zerofill);     

总结:不是容量限制 而是 显示宽度 要限制显示宽度      

1、创建表时 给整型加上宽度      

2、加上zerofill约束

二:浮点型

浮点型 即 小数型

分类(float):float(*****)   double(****)   decimal(*****)  

字节数:          4                  8                不确定(手动指定)

给浮点设置宽度限制

float(m,d)

double(m,d)

decimal(m,d)

长度说明(*****)

m表示 这个浮点数整体的长度

d表示 小数部分的长度

例如:float(5,3) 最大值:99.999

区别(*****)

相同点:小数部分最大长度都是30  float 和 double 的最大长度为255

不同点:decimal 的整体最大长度为65  精度不同  double 比 float 精度高  decimal 是准确的 不会丢失精度

如何选择:你对精确度要求高你就使用 decimal

三:字符型

分类

char 定长字符

varchar 变长字符

char 类型的长度是固定 无论你存储的数据有多长 占用的容量都一样

char(3) 存储的数据为"a"  在硬盘保存的数据还是占3字符长度 实际保存的是"a"

varchar 长度是可变的 存储的数据有多长就占用多长

varchar(3)存储的数据为"a"  在硬盘保存的数据还是占1字符长度 实际保存的是"a"

zxc asd qwe char(3)

(lbytes+zxc)(lbytes+asd)(lbytes+qwe)varchar(3)

如果是可变长度 则有问题 不知道数据从哪里结束 所以需要有一个位置保存数据的长度

vharchar 能支持的最大长度是65535 用于保存数据长度的数据最长两个bytes

如果是char类型 如果你的数据不足指定长度 就在后面用空格补全

验证:    

使用一个 char_length 的函数 可以查看字符的长度    

create table t18(a char(4),b varchar(4));    

insert into t18  value("x","x");    

select char_length(a),char_length(b) from t18;    

两个字段的长度都为1

结论:    

这是因为 mysql 在存储时 自动加上的空格 对使用者而言是没有意义的 所以mysql自动帮你处理掉空格了    

我们可以设置sql模式 来让它现出原形    

set global sql_mode="PAD_CHAR_TO_FULL_LENGTH,STRICT_TRANS_TABLES"    

设置完成后重启mysql 再次查询长度

注意:    

当你在执行这样的查询语句时  mysql会自动将参数末尾的空格去除    

select *from t19 where name="cs"    

当你在使用模糊搜索时,要注意 定长字符 后面可能会有空格 所以最好在后面加上百分号%    

select *from t19 where name like "cs";  

% 任意个数的任意字符  

_1个任务字符

如何选择

char :存取效率高,浪费存储空间

varchar:存取效率低于char,使用起来感受不到区别 通常用的是char

char和varchar 长度都比较小 最大就是65535

大文本类型:    

TEXT 系列:TINYTEXT TEXT MEDIUMTEXT LONGTEXT 文本是带有编码    

BLOB 系列:TINYBLOB BLOB MEDIUMBLOB LONGBLB 也是字符数据 但是不带编码       

二进制类型:     用于存储多媒体数据 比如视频,但是我们一般不会将多媒体数据存到数据 而是存储文件路径地址    

BINARY 系列:BINARY VARBINARY 存储二进制数据    

原文地址:https://www.cnblogs.com/zedong/p/9636531.html