MySQL 数据类型详解及在 Java 中的使用场景

在数据库设计和 Java 开发中,选择合适的数据类型和对应的 Java 类型是至关重要的。本文将详细介绍 MySQL 的各种数据类型,并结合 Java 的使用场景及注意事项。

数值类型

数值类型用于存储数值数据,分为整数类型和浮点数类型。

1. 整数类型
  • TINYINT

    • MySQL 范围:-128 到 127(有符号)或 0 到 255(无符号)。
    • Java 类型byte
    • 使用场景:适合存储布尔值、状态标识符(如枚举)等。例如,用于存储用户权限级别(如0表示普通用户,1表示管理员)。
    • 注意事项:占用存储空间小,但范围有限。
    • 使用评价:很适合枚举呀,虽然咱范围有限,但是你枚举超过上百个的场景很少吧,而且咱存储空间小,强烈推荐。
public enum UserRole {
    USER(0), ADMIN(1);
    
    private final byte code;
    
    UserRole(int code) {
        this.code = (byte) code;
    }
    
    public byte getCode() {
        return code;
    }
}
  • SMALLINT

    • MySQL 范围:-32768 到 32767(有符号)或 0 到 65535(无符号)。
    • Java 类型short
    • 使用场景:适合存储较小范围的整数数据,如评分、库存数量等。
    • 注意事项:需考虑数值范围是否足够。
    • 使用评价:目前我还没遇到过,不评价,嘻嘻。
  • MEDIUMINT

    • MySQL 范围:-8388608 到 8388607(有符号)或 0 到 16777215(无符号)。
    • Java 类型int
    • 使用场景:适合存储中等范围的统计数据。
    • 注意事项:较少使用,但适合需要中等范围的整数。
    • 使用评价:目前我还没遇到过,不评价,嘻嘻。
  • INT

    • MySQL 范围:-2147483648 到 2147483647(有符号)或 0 到 4294967295(无符号)。
    • Java 类型int
    • 使用场景:适合存储用户ID、订单号等常见的整数数据。
    • 注意事项:常用类型,但需注意数值是否会超出范围。
    • 使用评价:用的非常多。
    public class User {
        private int id;
        private String name;
        // Getters and setters
    }
    

  • BIGINT

    • MySQL 范围:-9223372036854775808 到 9223372036854775807(有符号)或 0 到 18446744073709551615(无符号)。
    • Java 类型long
    • 使用场景:适合存储超大范围的数据,如时间戳(epoch time)。如果项目是跨国的,通常会涉及到时区转换,和其他团队交互之类的,那最好使用bigint存储时间戳,时间戳就不存在时区问题。别其他团队,也很好处理。
    • 注意事项:占用存储空间较大,需谨慎使用。
    • 使用评价:我在跨国项目中,用的就是这个,虽然说在可视化数据管理系统中不直观,但是在时区转换、团队之间传递非常方便,有时区要求的强烈推荐。
    public class Event {
        private long timestamp;
        private String description;
        // Getters and setters
    }
    

2. 浮点数类型
  • FLOAT

    • MySQL 类型:单精度浮点数。
    • Java 类型float
    • 使用场景:适合存储精度要求不高的小数,如温度、评分等。
    • 注意事项:精度有限,可能会导致精度丢失。
    • 使用评价:我工作中没用过,不评价。
  • DOUBLE

    • MySQL 类型:双精度浮点数。
    • Java 类型double
    • 使用场景:适合存储高精度的小数,如科学计算、金融数据等。
    • 注意事项:占用空间大,但提供更高的精度。
    • 使用评价:我工作中没用过,不评价。
  • DECIMAL

    • MySQL 类型:高精度定点数。
    • Java 类型BigDecimal
    • 使用场景:适合存储财务数据、货币值等要求高精度的小数。项目涉及金额计算都用这个啊,最好别用double, BigDecimal可以精确小数。
    • 注意事项:占用空间较大,但能确保精度不丢失。
    • 使用评价:我在工作中涉及高精度金额计算,用的就是这个,强烈推荐。
    import java.math.BigDecimal;
    
    public class FinancialRecord {
        private BigDecimal amount;
        // Getters and setters
    }
    

日期和时间类型

日期和时间类型用于存储日期和时间数据,MySQL 提供了丰富的日期和时间类型。

  • DATE

    • MySQL 类型:日期,格式为 YYYY-MM-DD
    • Java 类型java.sql.Date
    • 使用场景:适合存储出生日期、订单日期等。
    • 注意事项:只存储日期,不包括时间部分。
  • TIME

    • MySQL 类型:时间,格式为 HH:MM:SS
    • Java 类型java.sql.Time
    • 使用场景:适合存储每日的时间点,如上班时间、下班时间等。
    • 注意事项:只存储时间,不包括日期部分。
  • DATETIME

    • MySQL 类型:日期和时间,格式为 YYYY-MM-DD HH:MM:SS
    • Java 类型java.sql.Timestamp
    • 使用场景:适合存储完整的时间戳,如记录创建时间、更新时间等。
    • 注意事项:存储空间大于 DATE 和 TIME。
  • TIMESTAMP

    • MySQL 类型:时间戳,格式为 YYYY-MM-DD HH:MM:SS,并且受时区影响。
    • Java 类型java.sql.Timestamp
    • 使用场景:适合存储需要跟踪修改时间的数据,通常用于记录行的创建和修改时间。
    • 注意事项:自动更新和时区处理,需注意与应用时区的一致性。
  • YEAR

    • MySQL 类型:年份,格式为 YYYY
    • Java 类型int
    • 使用场景:适合存储年份,如年份统计数据。
    • 注意事项:范围仅限于 1901 到 2155,适用场景有限。

字符串(字符)类型

字符串类型用于存储文本数据,MySQL 提供了多种字符串类型以满足不同需求。

  • CHAR

    • MySQL 类型:定长字符串,最大长度为 255 个字符。
    • Java 类型String
    • 使用场景:适合存储固定长度的数据,如国家代码、邮政编码等。
    • 注意事项:长度固定,可能会浪费存储空间。
  • VARCHAR

    • MySQL 类型:变长字符串,最大长度为 65535 个字符。
    • Java 类型String
    • 使用场景:适合存储长度不确定的文本,如名称、地址等。
    • 注意事项:长度可变,需预估最大长度以优化存储。
    • 使用评价:强烈推荐。
    public class User {
        private String username;
        private String address;
        // Getters and setters
    }
    

  • TEXT

    • MySQL 类型:长文本,最大长度为 65535 个字符。
    • Java 类型String
    • 使用场景:适合存储大段文本,如文章内容、评论等。如果项目中有富文本的话,内容就可以使用数据类型存储
    • 注意事项:不能有默认值,查询性能可能较差。
    • 使用评价:富文本数据可以用这个。
  • TINYTEXTMEDIUMTEXTLONGTEXT

    • MySQL 类型:分别用于存储更短或更长的文本。
    • Java 类型String
    • 使用场景:根据文本长度选择适合的类型,如 TINYTEXT 适合短文本,LONGTEXT 适合极长文本。
    • 注意事项:选择合适的类型以优化存储和查询性能。
  • BLOB

    • MySQL 类型:二进制大对象,最大长度为 65535 字节。
    • Java 类型byte[]
    • 使用场景:适合存储二进制文件,如图片、视频等。
    • 注意事项:查询性能较差,需根据文件大小选择合适的类型。
     
    public class Document {
        private byte[] content;
        // Getters and setters
    }
    

  • TINYBLOBMEDIUMBLOBLONGBLOB

    • MySQL 类型:分别用于存储更短或更长的二进制数据。
    • Java 类型byte[]
    • 使用场景:根据二进制数据的大小选择适合的类型。
    • 注意事项:需考虑存储和查询性能。
  • 27
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

书语时

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值