【MySQL】数据类型

06-02 1462阅读

数据类型

  • 1.数据类型分类
  • 2.数值类型
    • 2.1tinyint类型
    • 2.2bit类型
    • 2.3浮点数类型
      • 2.3.1 float
      • 2.3.2 decimal
  • 3.字符串类型
    • 3.1 char
    • 3.2 varchar
    • 3.3char和varchar比较
  • 4.日期和时间类型
  • 5.enum和set

【MySQL】数据类型

点赞👍👍收藏🌟🌟关注💖💖
你的支持是对我最大的鼓励,我们一起努力吧!😃😃

1.数据类型分类

就如我们学习的C/C+等语言每一种都有自己的数据类型,MySQL也有自己的数据类型,常见的如下:

【MySQL】数据类型

2.数值类型

数值类型整体是被分成:位类型、布尔类型、整数类型、浮点数类型。

下面列出来的是主要是以整型为例:
【MySQL】数据类型
上面这么多类型其实都叫做整数类型,根据名字它们所占字节数大小是不一样的。都是MySQL这里规定好的。默认如果我们只写了tinyint、smallint等这样的,默认是有符号类型的,取值范围也和C/C++学习的对应的整数范围是一样的。如果tinyint、samllint后面加 unsigned 就代理是无符号类型。

2.1tinyint类型

我们以tinyint类型为例,剩下的整数类型都是一样的。

下面我们先建立一张表

create table if not exists t1(
     num tinyint
     );

表现在也建立好了,我们看到tinyint后面跟一个数字4,这是什么意思,未来其他类型后面()里面的含义我们都会说,而这个等到说约束的时候在细说,现在先不要管。

【MySQL】数据类型

插入语句后面我们再说,现在我们先用。tinyint目前是有符号的,取值范围是-128~127,所以呢插入一些值看看情况

insert into t1 values (-128); #全列插入,不指定向那列中插

此时发现在tinyint取值范围内的数据都可以正常插入。

【MySQL】数据类型

当我们插入取值范围外的时候,发现mysql不让我们插了。报我们超出范围了。

【MySQL】数据类型

  • 在MySQL中,整型可以指定是有符号的和无符号的,默认是有符号的。
  • 可以通过UNSIGNED来说明某个字段是无符号的

当前默认是有符号的,我们当然也可以建立一个无符号的啊,

create table t2(
     num tinyint unsigned
     );

此时就建立了一张表num字段的类型就是无符号类型,然后再插入一些数据看看情况。

我们同样发现一个问题,当我们插入这个类型的值超过了它的取值范围,mysql的做法是拦截,不让你插入。

【MySQL】数据类型

如果在C/C++中向一个char类型插入比它取值范围还大的数据 , 如char a=1234567;此时会发生截断然后放进去。

如果我们向mysql特定的类型中插入不合法的数据,MySQL一般都是直接拦截我们,不让我们做对应的操作! MySQL必须保证插入数据的完整性,一旦截断,那在MySQL中有些是成功插入的有些是截断后插入的,那作为用户来讲,他还能信任MySQL中插入的数据吗?

反过来,如果我们已经有数据被成功插入到mysql中,一定是插入的时候合法的!

所以mysql中,一般而言,数据类型本身也是一种:约束!

约束 —> 倒逼程序员尽可能进行正确插入。所以约束,约束的是使用者。另外如果你不是一个很好的使用者,mysql也能保证数据插入的合法性。

这样的话就能保证数据库中的数据是可预期,完整的。
以tinyint为例,它是有符号的,所以可预期的是未来插入的值范围一定在-128~127的。并且数据是完整的没有发生过截断或者隐式类型转化。

我们还可以发现一个细节,mysql表中建立属性列, 列名称在前 类型在后 如 num tinyint ,如果反过来就是C/C++那一套形式。

tinyint我们说完了,其他类型自己推导。

注意:尽量不使用unsigned,对于int类型可能存放不下的数据,int unsigned同样可能存放不下,与其如此,还不如设计时,将int类型提升为bigint类型。

不过我们还是结合具体场景来使用类型。

2.2bit类型

基本语法:

bit [ (M) ] :位字段类型。M表示每个值的位数,范围从1到64。如果M被忽略,默认为1。

位类型,M表示比特位的位数。比如一个比特位取值范围0-1,两个比特位取值范围0-3,四个比特位取值范围0-15

create table t3(
    id int,
    online bit(1)
    );

用一个比特位表示这个用户是否在线

因为我们只有一个比特位,只能插0或1,插入其他的都不行超过范围了。

【MySQL】数据类型

当我们查一下t3这个表的内容,我们发现

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们。

目录[+]

取消
微信二维码
微信二维码
支付宝二维码