面试题分享原因
一次面试中,面试官说考我点最简单的知识点,上来问我:TINYINT,SMALLINT,MEDIUMINT,INT,BIGINT这些都是整数类型的,我就不问你他们的字节空间和范围了,你说一下他们分别对应的Java中的那些类型?
我:。。。。(汗流浃背!!!)
mysql中有那些数据类型,他们的基本特征是啥,分别对应的Java中的哪些类型?
献上表格(各位观众老爷,小弟手动编辑表格,点赞,收藏,评论,转发,有币的投个币)
名称 | Java对应类型 | 描述 | ||
数值类型 | 整数类型 | tinyint | java.lang.Byte 或 java.lang.Integer (如果需要更大的范围) | 最小的整数类型 |
smallint | java.lang.Short 或 java.lang.Integer | 较小的整数类型 | ||
mediumint | java.lang.Integer 或 java.lang.Long | 中等大小的整数类型 | ||
int/integer | java.lang.Integer | 常规整数类型 | ||
bigint | java.lang.Long | 大整数类型 | ||
浮点数类型 | float | java.lang.Float | 单精度浮点数 | |
double | java.lang.Double | 双精度浮点数 | ||
decimal | java.math.BigDecimal | 高精度定点数 | ||
字符串类型 | 定长字符串 | CHAR(n) | java.lang.String | 适用于长度固定、变化不大的短文本, 如邮政编码、电话区号等 |
变长字符串 | VARCHAR(n) | java.lang.String | 适用于长度可变的大多数文本数据。 | |
文本类型 | TEXT | java.lang.String 或 java.io.Reader/Writer (对于大文本,可能需要流式处理) | 适用于存储文章、评论等大段文本。 | |
二进制类型 | BINARY(n) | byte[] | 定长二进制数据,类似于CHAR | |
VARBINARY(n) | byte[] | 可变长度二进制数据,类似于VARCHAR, | ||
BLOB | byte[] 或 java.io.InputStream/OutputStream (对于大二进制数据,可能需要流式处理) | 适用于存储图片、文件等二进制内容 | ||
日期和时间类型 | DATE | java.sql.Date | 存储日期,格式为'YYYY-MM-DD'。 适用于仅需记录日期的场景 | |
TIME | java.sql.Time | 存储时间,格式为'HH:MM:SS',可选微秒精度。 适用于仅需记录时间的场景 | ||
DATETIME/TIMESTAMP | java.sql.Timestamp | 存储日期和时间, 格式分别为'YYYY-MM-DD HH:MM:SS' 和'YYYY-MM-DD HH:MM:SS[.fraction]'。 TIMESTAMP具有时区转换功能。 适用于需要同时记录日期和时间的场景。 | ||
YEAR | java.sql.Date 或 java.util.Calendar (设置年份) | 存储年份,占用1字节,格式为'YYYY'或'YY'。 适用于只需要记录年份的场景。 | ||
其他类型 | ENUM | java.lang.String 或 枚举类型 (如 enum Gender { MALE, FEMALE }) | 枚举类型,预定义一组固定值供选择。 适用于有限且固定的值集合,如性别、状态等。 | |
SET | java.util.Set<String> 或 java.lang.String[] | 集合类型,预定义一组固定值,允许在单个字段中存储多个值。 适用于需要存储多个互斥标签或分类的场景 | ||
BOOLEAN | java.lang.Boolean | 布尔类型,存储真/假值。 尽管MySQL中没有原生的BOOLEAN类型, 但常使用TINYINT(1)作为替代,0表示假,1表示真。 |
MySQL数据库提供了丰富多样的数据类型来满足不同的数据存储需求。以下是MySQL中主要的数据类型及其基本特征、适用场景,以及对应的Java数据类型:
1. 数值类型
a. 整数类型
TINYINT
- 最小的整数类型,占用1字节存储空间,范围-128到127(无符号为0到255)。适用于存储非常小的整数值,如布尔值(0/1)或有限状态标识。
Java对应:java.lang.Byte 或 java.lang.Integer(如果需要更大的范围)
SMALLINT
- 较小的整数类型,占用2字节,范围-32768到32767(无符号为0到65535)。
Java对应:java.lang.Short 或 java.lang.Integer
MEDIUMINT
- 中等大小的整数类型,占用3字节,范围-8388608到8388607(无符号为0到16777215)。
Java对应:java.lang.Integer 或 java.lang.Long
INT/INTEGER
- 常规整数类型,占用4字节,范围-2^31到2^31-1(无符号为0到2^32-1)。最常用的整数类型,适用于大多数整数场景。
Java对应:java.lang.Integer
BIGINT
- 大整数类型,占用8字节,范围-2^63到2^63-1(无符号为0到2^64-1)。用于存储极大或极小范围的整数值。
Java对应:java.lang.Long
b. 浮点数类型
FLOAT
- 单精度浮点数,占用4字节,精度较低,适用于不需要高精度计算的场合。
Java对应:java.lang.Float
DOUBLE
- 双精度浮点数,占用8字节,精度较高,适用于科学计算、金融等领域需要较高精度的场合。
Java对应:java.lang.Double
DECIMAL
- 高精度定点数,可定制精度和标度,适合存储货币金额等需要精确计算的数值,避免浮点数的精度问题。
Java对应:java.math.BigDecimal
2. 字符串类型
a. 定长字符串 CHAR(n)
- 固定长度的字符串,存储时始终占用n个字符的空间,不足部分以空格填充。适用于长度固定、变化不大的短文本,如邮政编码、电话区号等。
Java对应:java.lang.String
b. 变长字符串 VARCHAR(n)
可变长度的字符串,仅占用实际字符长度+1或2字节(取决于字符集)的空间,节省存储。适用于长度可变的大多数文本数据。
Java对应:java.lang.String
c. 文本类型 TEXT
- 存储大量文本数据,有多种大小限制的子类型(如TINYTEXT、MEDIUMTEXT、LONGTEXT)。适用于存储文章、评论等大段文本。
Java对应:java.lang.String 或 java.io.Reader/Writer(对于大文本,可能需要流式处理)
d. 二进制类型
BINARY(n)
- 定长二进制数据,类似于CHAR,存储时始终占用n个字节的空间。
Java对应:byte[]
VARBINARY(n)
- 可变长度二进制数据,类似于VARCHAR,仅占用实际字节长度+1或2字节的空间。
Java对应:byte[]
BLOB
- 存储大量二进制数据,有多种大小限制的子类型(如TINYBLOB、MEDIUMBLOB、LONGBLOB)。适用于存储图片、文件等二进制内容。
Java对应:byte[] 或 java.io.InputStream/OutputStream(对于大二进制数据,可能需要流式处理)
3. 日期和时间类型
a. DATE
- 存储日期,格式为'YYYY-MM-DD'。适用于仅需记录日期的场景。
Java对应:java.sql.Date
b. TIME
- 存储时间,格式为'HH:MM:SS',可选微秒精度。适用于仅需记录时间的场景。
Java对应:java.sql.Time
c. DATETIME/TIMESTAMP
- 存储日期和时间,格式分别为'YYYY-MM-DD HH:MM:SS'和'YYYY-MM-DD
HH:MM:SS[.fraction]'。TIMESTAMP具有时区转换功能。适用于需要同时记录日期和时间的场景。
Java对应:java.sql.Timestamp
d. YEAR
- 存储年份,占用1字节,格式为'YYYY'或'YY'。适用于只需要记录年份的场景。
Java对应:java.sql.Date 或 java.util.Calendar(设置年份)
4. 其他类型
a. ENUM
- 枚举类型,预定义一组固定值供选择。适用于有限且固定的值集合,如性别、状态等。
Java对应:java.lang.String 或 枚举类型(如 enum Gender { MALE, FEMALE })
b. SET
- 集合类型,预定义一组固定值,允许在单个字段中存储多个值。适用于需要存储多个互斥标签或分类的场景。
Java对应:java.util.Set<String> 或 java.lang.String[]
c. BOOLEAN
- 布尔类型,存储真/假值。尽管MySQL中没有原生的BOOLEAN类型,但常使用TINYINT(1)作为替代,0表示假,1表示真。
Java对应:java.lang.Boolean
总的来说,
选择合适的MySQL数据类型取决于具体的数据特性和应用场景,同时在Java应用中使用相应的Java数据类型进行交互,以确保数据的正确存储和处理。在实际开发中,还需要考虑数据类型对存储空间、查询性能以及数据验证等方面的影响。
全网第一个编辑此内容对照表和内容整理(手动编辑),如果使用此表,请注明出处和借鉴,否则将会追究其相关责任