为了账号安全,请及时绑定邮箱和手机立即绑定

玩转Mysql数据类型

标签:
MySQL

一. 数据类型的一些常识

1. MySQL中存的是数据。

2.只要是数据,我们就会规定数据的类型。

3.在表的字段中规定了使用的是某个数据类型;那么,在插入的数据中就要使用对应的数据类型;并且,遵守数据类型的长度要求。
二: Mysql中数据类型的分类

    数值类型(整型、浮点)
    字符串类型
    日期时间类型
    复合类型
    空间类型(非科学性工作基本不用)

三. 整型
MySQL数据类型     所占字节     值范围
tinyint                    1字节       -128~127
smallint                  2字节     -32768~32767
mediumint             3字节     -8388608~8388607
int                           4字节     -2147483648~2147483647
bigint                      8字节     +-9.22*10的18次方

1.整型的长度不同,在实际使用过程也就不同。

2.MySQL 以一个可选的显示宽度指示器的形式对 SQL 标准进行扩展,这样当从数据库检索一个值时,可以把这个值加长到指定的长度。例如,指定一个字段的类型为 INT(6),就可以保证所包含数字少于 6 个的值从数据库中检索出来时能够自动地用空格填充。需要注意的是,使用一个宽度指示器不会影响字段的大小和它可以存储的值的范围。

3.注意:

    在创建表字段时,性别我们可以使用无符号的微小整型(tinyint)来表示。用0表示女、用1表示男。用2表示未知。
    同样人类年龄也是,在创建表字段时可用无符号的整型。因为人类的年龄还没有负数
    在实际使用过程中。我们业务中最大需要存储多大的数值。我们创建表时,就选择什么样的类型来存储这样的值。

四: 浮点类型
MySQL数据类型     所占字节                  值范围
float(m, d)              4字节     单精度浮点型,m总个数,d小数位
double(m, d)          8字节     双精度浮点型,m总个数,d小数位
decimal(m, d)           decimal是存储为字符串的浮点数

注意:

    浮点是非精确值,会存在不太准确的情况
    而decimal叫做定点数。在MySQL内部,本质上是用字符串存储的。实际使用过程中如果存在金额、钱精度要求比较高的浮点数存储,建议使用decimal(定点数)这个类型。

五: 字符类型
MySQL数据类型     所占字节                       值范围
CHAR                   0-255字节                  定长字符串
VARCHAR            0-255字节                  变长字符串
TINYBLOB            0-255字节                  不超过255个字符的二进制字符串
TINYTEXT             0-255字节                  短文本字符串
BLOB                    0-65535字节               二进制形式的长文本数据
TEXT                     0-65535字节               长文本数据
MEDIUMBLOB      0-16 777 215字节       二进制形式的中等长度文本数据
MEDIUMTEXT       0-16 777 215字节       中等长度文本数据
LOGNGBLOB        0-4 294 967 295字节     二进制形式的极大文本数据
LONGTEXT           0-4 294 967 295字节      极大文本数据
VARBINARY(M)     允许长度0-M个字节的定长字节符串     值的长度+1个字节
BINARY(M)     M     允许长度0-M个字节的定长字节符串

1. *CHAR *类型用于定长字符串,并且必须在圆括号内用一个大小修饰符来定义。这个大小修饰符的范围从 0-255。比指定长度大的值将被截短,而比指定长度小的值将会用空格作填补。


2.*VARCHAR  *把这个大小视为值的大小,不长度不足的情况下就用空格补足。而 VARCHAR 类型把它视为最大值并且只使用存储字符串实际需要的长度,类型不会被空格填补,但长于指示器的值仍然会被截短。因为 VARCHAR 类型可以根据实际内容动态改变存储值的长度,所以在不能确定字段需要多少字符时使用 VARCHAR 类型可以大大地节约磁盘空间、提高存储效率。

3.text类型与blob类型对于字段长度要求超过 255 个的情况下,MySQL 提供了 TEXT 和 BLOB 两种类型。根据存储数据的大小,它们都有不同的子类型。这些大型的数据用于存储文本块或图像、声音文件等二进制数据类型。

4.TEXT 和 BLOB 类型在分类和比较上存在区别。BLOB 类型区分大小写,而 TEXT 不区分大小写。大小修饰符不用于各种 BLOB 和 TEXT 子类型。
六: 时间类型
MySQL数据类型     所占字节     值范围
date                          3字节     日期,格式:2014-09-18
time                          3字节     时间,格式:08:42:30
datetime                   8字节     日期时间,格式:2014-09-18 08:42:30
timestamp                 4字节     自动存储记录修改的时间
year                           1字节     年份

注意:

    时间类型在web系统中用的比较少,很多时候很多人喜欢使用int来存储时间。插入时插入的是unix时间戳,因为这种方式更方便计算。在前端业务中用date类型的函数,再将unix时间戳转成人们可识别的时间。
    上面的类型你可以根据实际情况实际进行选择
    有些人为了在数据库管理中方便查看,也有人使用datetime类型来存储时间。

七: 复合类型
MySQL数据类型     说明                                举例
set                        集合类型     set(“member”, “member2″, … “member64″)
enum                  枚举类型     enum(“member1″, “member2″, … “member65535″)

      一个 ENUM 类型只允许从一个集合中取得一个值;而 SET 类型允许从一个集合中取得任意多个值。

1. ENUM 类型

ENUM 类型因为只允许在集合中取得一个值,有点类似于单选项。在处理相互排拆的数据时容易让人理解,比如人类的性别。ENUM 类型字段可以从集合中取得一个值或使用null值,除此之外的输入将会使 MySQL 在这个字段中插入一个空字符串。另外如果插入值的大小写与集合中值的大小写不匹配,MySQL会自动使用插入值的大小写转换成与集合中大小写一致的值。

ENUM 类型在系统内部可以存储为数字,并且从1开始用数字做索引。一个 ENUM 类型最多可以包含 65536 个元素,其中一个元素被 MySQL 保留,用来存储错误信息,这个错误值用索引 0 或者一个空字符串表示。

MySQL 认为 ENUM 类型集合中出现的值是合法输入,除此之外其它任何输入都将失败。这说明通过搜索包含空字符串或对应数字索引为 0 的行就可以很容易地找到错误记录的位置。

2. SET 类型SET 类型与 ENUM 类型相似但不相同。SET类型可以从预定义的集合中取得任意数量的值。并且与 ENUM 类型相同的是任何试图在 SET 类型字段中插入非预定义的值都会使MySQL插入一个空字符串。如果插入一个即有合法的元素又有非法的元素的记录,MySQL 将会保留合法的元素,除去非法的元素。

一个 SET 类型最多可以包含 64 项元素。在 SET 元素中值被存储为一个分离的“位”序列,这些“位”表示与它相对应的元素。“位”是创建有序元素集合的一种简单而有效的方式。
并且它还去除了重复的元素,所以SET类型中不可能包含两个相同的元素。
希望从 SET 类型字段中找出非法的记录只需查找包含空字符串或二进制值为 0 的行。
八. 类型建表运用

在创建表的语句的时候使用对应的类型

    create table if not exists demo (
       id int(11) NOT NULL,
       username varchar(50) NOT NULL,
       password char(32) NOT NULL,
       content longtext NOT NULL,
       createtime datetime NOT NULL,
       sex tinyint(4) NOT NULL
     ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

九: 字段其他属性设置

1. UNSIGNED(无符号)主要用于整型和浮点类型,使用无符号。即,没有前面的-(负号)。

    存储位数更长。tinyint整型的取值区间为,-128~127。而使用无符号后可存储0-255个长度。

    创建时在整型或浮点字段语句后接上: unsigned        ;

2. ZEROFILL(0填充)0(不是空格)可以用来真补输出的值。使用这个修饰符可以阻止 MySQL 数据库存储负值。

    创建时在整型或浮点字段语句后接上:zerofill

3. defaultdefault属性确保在没有任何值可用的情况下,赋予某个常量值,这个值必须是常量,因为MySQL不允许插入函数或表达式值。此外,此属性无法用于BLOB或TEXT列。如果已经为此列指定了NULL属性,没有指定默认值时默认值将为NULL,否则默认值将依赖于字段的数据类型。

   创建时在整型或浮点字段语句后接上: default '值'

4. not null如果将一个列定义为not null,将不允许向该列插入null值。建议在重要情况下始终使用not null属性,因为它提供了一个基本验证,确保已经向查询传递了所有必要的值。

  创建时在整型或浮点字段语句后接上:not null

5. null为列指定null属性时,该列可以保持为空,而不论行中其它列是否已经被填充。记住,null精确的说法是“无”,而不是空字符串或0。

创建时在整型或浮点字段语句后不要声明not null即可。
---------------------
原文作者:俗世凡人行
原文链接:https://blog.csdn.net/weixin_41887155/article/details/85960729





点击查看更多内容
1人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消