专栏目录请点击
简介
一般常见的数据类型如下
- 数值型
- 整型
- 小数
- 定点数
- 浮点数
- 字符型
- 较短的文本:char,varchar
- 较长的文本:text,blob(较长的二进制数据)
- 日期型
- 日期
- 时间
数值
整型
整形有如下几种类型
创建表格添加类型如下 - CREATE TABLE book(
- id INT,
- number INT UNSIGNED # 无符号
- );
复制代码
- 我们不设置有负号还是没符号的话,他默认是有符号的
- 如果插入的数值超出了整型的范围,他会抛出一个错误out of range并且插入临界值
- 如果不设置长度,他会有默认的长度
- 长度代表了最大的宽度,不过不够会用0在左边填充,需要搭配zerofill的使用
小数
浮点型 float与double
定点型 dec和decimal,他来其实表示的是一个
无论是浮点型还是定点型,他们都相当于一个函数,他们都有两个参数M,D,如float(M,D)等
- 参数的含义
- M表示整数位 + 小数位
- D表示小数位
- 如果超出位数,则插入临界值
- 参数都可以省略
- 如果是float和double,那么,会根据插入的精度来决定精度
- 如果是decimal,则D默认为10,M默认为0
- 定点型精度要求较高,一般对于精度要求较高的时候使用,比如货币运算等
- CREATE TABLE book(
- id INT,
- price1 FLOAT(5,2),
- price2 DOUBLE(5,2),
- price2 DEC(5,2)
- );
复制代码
字符
汉字的大小
一个汉字在数据库中占用的字节数取决于所使用的编码格式。以下是一些常见的编码格式及对应的汉字字节数:
- 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及以上 | 100 | 100(字符为单位) |
请注意,上述关于汉字数量的计算是基于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-8 | 1 | | 9-16 | 2 | | 17-24 | 3 | | 25-32 | 4 | | 33-64 | 8 |
长文本
text,blob
菜鸟教程
日期
对于时间戳的说明
- 时间戳支持的时间范围较小,取值范围为19700101080001-2038年的某个时间
- 而datetime得取值范围:1000-1-1到9999-12-31有关
- 时间戳和实际得时区有关,更能反应实际的日期,而datetime则只能反映出插入时的当地的时区
- 时间戳的属性受mysql版本和sqlmodel的影像很大
|