(一)MySQL数据类型

欢迎访问

VARCHAR

VARCHAR(max_length)  //5.0版本以上,varchar(20),指的是20字符

VARCHAR 允许的最大长度为 65535 个字节,这也是 MySQL 中的行大小的限制

因此如果使用UTF8的最大长度为(65535-1-2)/3

减1是因为实际存储从第2个字节开始
减2则因为要在列表长度存储实际字符长度
除3是因为utf8编码限制

例:

create table t4(c int, c2 char(30), c3 varchar(N)) charset=utf8;
N的最大值:(65535-1-2-4-30*3)/3

VARCHAR 截断内容

当插入的内容超过 VARCHAR 列定义的长度时,MySQL 会采用如下策略:

  • 如果超过的部分只包含空格,则多余的空格会被截断。
  • 如果超过的部分不只是空格,则给出错误提示。

CHAR

CHAR(length) //默认1 最大255  性能要比 VARCHAR 更好

写入 CHAR 列中的字符串的长度小于指定的字符长度,MySQL 会在源字符串后填充空格一直到指定的长度。当您读取 CHAR 列中的值时,MySQL 会删除后面的空格

后缀空格问题:即使原来存的是’Tom ’ 取出也会变成 ‘Tom’

插入超过长度的值会直接返回错误

INT

类型字节数
TINYINT1
SMALLINT2
MEDIUMINT3
INT4
BIGINT8

INTINTEGER 是同义词。

  • 自增整型类型做主键,务必使用类型 BIGINT,而非 INT,后期表结构调整代价巨大;
  • MySQL 8.0 版本前,自增整型会有回溯问题,做业务开发的你一定要了解这个问题;

在删除自增为 3 的这条记录后,下一个自增值依然为 4(AUTO_INCREMENT=4),这里并没有错误,自增并不会进行回溯。但若这时数据库发生重启,那数据库启动后,表 t 的自增起始值将再次变为 3,即自增值发生回溯

  • 当达到自增整型类型的上限值时,再次自增插入,MySQL 数据库会报重复错误;
  • 不要再使用浮点类型 Float、Double,MySQL 后续版本将不再支持上述两种类型;
  • 账户余额字段,设计是用整型类型(BIGINT),而不是 DECIMAL 类型,这样性能更好,存储更紧凑

DATE

MySQL DATE 使用 yyyy-mm-dd 格式来存储日期值。如果您想以其他的日期格式显示,比如 mm-dd-yyyy,您可以使用 DATE_FORMAT 函数将日期格式化为您需要的格式。

SELECT DATE_FORMAT(CURDATE(), '%m/%d/%Y') today;
+------------+
| today      |
+------------+
| 03/25/2022 |
+------------+

DATETIME 和 TIMESTAMP

TIMESTAMP 需要 4 个字节,而 DATETIME 需要 8 个字节。TIMESTAMPDATETIME 二者都需要额外字节存储小数秒。

TIMESTAMP 值范围从 1970-01-01 00:00:01 UTC2038-01-19 03:14:07 UTC 。如果要存储超过 2038 年的时间值,则应使用 DATETIME 代替 TIMESTAMP

MySQL TIMESTAMP 以 UTC 值存储(会从当前时区转换到UTC)。但是,MySQL 将 DATETIME 值按原样存储,没有时区。

YEAR

YEAR 数据类型占用 1 个字节,YEAR值的范围为从19012155, 还有 0000

定义为 YEAR 数据类型的列可以接受多种输入格式,包括:

  • 4 位数字的年份值,从 1901 to 2155

  • 4 位数字的年份值的字符串形式,从 '1901''2155'

  • 2 位数字的年份值,从 099,并按如下规则转换为 4 位数年份:

    • 169 转换为 20012069
    • 7099 转换为 19701999
    • 0 转换为 0000
  • 2 位数字的年份值的字符串形式,从 '0''99',并按如下规则转换为 4 位数年份:

    • '0''69' 转换为 20002069

    • '70''99' 转换为 19701999

问题自测

1.char 和 varchar 的区别是什么?

  1. char:固定长度,分配固定的存储空间,存储的数据长度小于指定的长度,剩余空间会用空格来填充(取出时会删除后面空格,所以原来字符串有空格也会被删)。char类型在存储固定长度的数据时比较高效。
  2. varchar:可变长度的字符数据类型。varchar类型存储的数据长度是可变的,数据库会根据实际存储的数据长度来分配存储空间。相比于char类型,varchar类型在存储可变长度的数据时比较节省空间。

2.varchar(100)和 varchar(10)的区别是什么?

存储的最大长度为多少个字符,实际占用的存储空间取决于存储的数据长度

3.decimal 和 float/double 的区别是什么?存储⾦钱应该⽤哪⼀种?

  • decimal 类型的值以十进制方式存储,这意味着它们可以精确地表示小数,不会出现浮点数计算中的舍入误差。
  • floatdouble 类型的值以二进制方式存储,它们在存储和计算时可能会引入舍入误差,特别是在执行多次计算后会逐渐积累误差。
  • float使用4个字节存储,double使用8个字节,
  • decimal类型的数据存储形式是,将每9位十进制数存储为4个字节,decimal(M,D),其中,
    M 的范围是1~65,
    D 的范围是0~30,
    而且D不能大于M。字段decimal(5,2),5-2=3,其中小数部分为2,整数部分为3

4.为什么不推荐使⽤ text 和 blob?

BLOB(Binary Large Object)用于存储二进制数据,而TEXT用于存储字符数据

​ 1.不适合建索引

​ 2.数据处理和转换的复杂性增加

​ 3.降低数据的可读性和维护性

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值