[数据库] 数据库的数据类型

1027 0
Honkers 2025-3-6 16:23:07 | 显示全部楼层 |阅读模式

专栏目录请点击

简介

一般常见的数据类型如下

  1. 数值型
    1. 整型
    2. 小数
      1. 定点数
      2. 浮点数
  2. 字符型
    1. 较短的文本:char,varchar
    2. 较长的文本:text,blob(较长的二进制数据)
  3. 日期型
    1. 日期
    2. 时间

数值

整型

整形有如下几种类型


创建表格添加类型如下

  1. CREATE TABLE book(
  2. id INT,
  3. number INT UNSIGNED # 无符号
  4. );
复制代码
  1. 我们不设置有负号还是没符号的话,他默认是有符号的
  2. 如果插入的数值超出了整型的范围,他会抛出一个错误out of range并且插入临界值
  3. 如果不设置长度,他会有默认的长度
    • 长度代表了最大的宽度,不过不够会用0在左边填充,需要搭配zerofill的使用

小数

浮点型
float与double

定点型
dec和decimal,他来其实表示的是一个

无论是浮点型还是定点型,他们都相当于一个函数,他们都有两个参数M,D,如float(M,D)等

  1. 参数的含义
    • M表示整数位 + 小数位
    • D表示小数位
    • 如果超出位数,则插入临界值
  2. 参数都可以省略
    • 如果是float和double,那么,会根据插入的精度来决定精度
    • 如果是decimal,则D默认为10,M默认为0
  3. 定点型精度要求较高,一般对于精度要求较高的时候使用,比如货币运算等
  1. CREATE TABLE book(
  2. id INT,
  3. price1 FLOAT(5,2),
  4. price2 DOUBLE(5,2),
  5. price2 DEC(5,2)
  6. );
复制代码

字符

汉字的大小

一个汉字在数据库中占用的字节数取决于所使用的编码格式。以下是一些常见的编码格式及对应的汉字字节数:

  • UTF-8编码:汉字可能占用2到4个字节。具体来说,一些基本的汉字(如“〇”)占用2个字节,而中日韩超大字符集里的汉字(有5万多个)可能占用4个字节。另外,一些特殊的符号可能占用更多的字节。
  • GBK编码:一个汉字通常占用2个字节。
  • Unicode编码:虽然Unicode为所有字符分配了唯一的字符码,但它有多种编码方式,如UTF-8、UTF-16和UTF-32。在这些编码方式中,汉字的字节数可能会有所不同。例如,UTF-16中,中文和字母都是占2个字节;而在UTF-32中,中文和字母都是占4个字节。

短文本

char和varchar

用来保存MySQL中较短的字符串

字符串类型最多字符数特点空间的耗费效率
char(M)M为0~255之间的整数固定长度的字符串比较耗费
varchar(M)M为0~65535之间的整数可变长度的字符串比较节省

varchar(100)能存多少

varchar(100)能存储的英文字符和汉字数量,主要取决于MySQL的版本以及字符集编码方式。

英文字符
  • 对于所有版本的MySQL,varchar(100)都可以存储最多100个英文字符(假设每个英文字符占用1个字节)。这是因为英文字符在大多数编码方式下(如ASCII、UTF-8等)都只占用1个字节。
汉字
  • 对于MySQL 4.0及之前的版本,varchar(100)表示的是100个字节的长度。如果采用UTF-8编码方式,由于每个汉字在UTF-8下占用3个字节,因此最多只能存储约33个汉字(100字节 / 3字节/汉字 ≈ 33)。
  • 对于MySQL 5.0及之后的版本,varchar(100)表示的是100个字符的长度,而不是字节。这意味着,无论采用何种字符集编码方式(包括UTF-8),都可以存储最多100个汉字(或其他字符),因为这里的“字符”是一个抽象的概念,不直接对应于字节数。然而,需要注意的是,如果实际存储的汉字数量超过了varchar字段定义的最大字符数,将会导致数据截断或错误。
总结
MySQL版本英文字符数量汉字数量(UTF-8编码)
4.0及以下100约33
5.0及以上100100(字符为单位)

请注意,上述关于汉字数量的计算是基于UTF-8编码方式的。如果采用其他编码方式(如GBK),则汉字的字节数可能会有所不同,进而影响varchar(100)能够存储的汉字数量。在实际应用中,建议根据具体的MySQL版本和字符集编码方式来确定varchar字段能够存储的字符数量。

其他

类型描述
binary和varbinary用于保存较短的二进制
enum用于保存枚举类型,要求插入的值必须是列表中指定的值之一,如果列表成员为1~225,那么需要一个字节存储,如果列表成员为225~65535,则需要两个字节存储
set用于保存集合类型,可以保存0-64个成员,set可以一次选取多个成员,根据存储成员的不同,所占的空间也是不同的,可以见下面的表格
bit用于保存位类型,Bit(1)~Bit(8)

set成员与所占字节

成员数字节数
1-81
9-162
17-243
25-324
33-648

长文本

text,blob

菜鸟教程

日期

对于时间戳的说明

  1. 时间戳支持的时间范围较小,取值范围为19700101080001-2038年的某个时间
  2. 而datetime得取值范围:1000-1-1到9999-12-31有关
  3. 时间戳和实际得时区有关,更能反应实际的日期,而datetime则只能反映出插入时的当地的时区
  4. 时间戳的属性受mysql版本和sqlmodel的影像很大

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

中国红客联盟公众号

联系站长QQ:5520533

admin@chnhonker.com
Copyright © 2001-2026 Discuz Team. Powered by Discuz! X3.5 ( 粤ICP备13060014号 )|天天打卡 本站已运行