精华内容
下载资源
问答
  • 数据库中可以用 datetime、bigint、timestamp 来表示时间,那么选择什么类型来存储时间比较合适呢?前期数据准备通过程序往数据库插入 50w 数据数据表:CREATE TABLE `users` ( `id` int(11) NOT NULL AUTO_...

    数据库中可以用 datetime、bigint、timestamp 来表示时间,那么选择什么类型来存储时间比较合适呢?

    前期数据准备

    82f8cb50f0f1d79bbc7962fa2785490d.png

    通过程序往数据库插入 50w 数据

    • 数据表:
    CREATE TABLE `users` (  `id` int(11) NOT NULL AUTO_INCREMENT,  `time_date` datetime NOT NULL,  `time_timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,  `time_long` bigint(20) NOT NULL,  PRIMARY KEY (`id`),  KEY `time_long` (`time_long`),  KEY `time_timestamp` (`time_timestamp`),  KEY `time_date` (`time_date`)) ENGINE=InnoDB AUTO_INCREMENT=500003 DEFAULT CHARSET=latin1

    其中 time_long、time_timestamp、time_date 为同一时间的不同存储格式

    • 实体类 users
    /** * @author hetiantian * @date 2018/10/21 * */@Builder@Datapublic class Users {    /**     * 自增唯一id     * */    private Long id;    /**     * date类型的时间     * */    private Date timeDate;    /**     * timestamp类型的时间     * */    private Timestamp timeTimestamp;    /**     * long类型的时间     * */    private long timeLong;}
    • dao 层接口
    /** * @author hetiantian * @date 2018/10/21 * */@Mapperpublic interface UsersMapper {    @Insert("insert into users(time_date, time_timestamp, time_long) value(#{timeDate}, #{timeTimestamp}, #{timeLong})")    @Options(useGeneratedKeys = true,keyProperty = "id",keyColumn = "id")    int saveUsers(Users users);}
    • 测试类往数据库插入数据
    public class UsersMapperTest extends BaseTest {    @Resource    private UsersMapper usersMapper;    @Test    public void test() {        for (int i = 0; i < 500000; i++) {            long time = System.currentTimeMillis();            usersMapper.saveUsers(Users.builder().timeDate(new Date(time)).timeLong(time).timeTimestamp(new Timestamp(time)).build());        }    }}

    生成数据代码方至 github:https://github.com/TiantianUpup/sql-test/ 如果不想用代码生成,而是想通过 sql 文件导入数据,附 sql 文件网盘地址:https://pan.baidu.com/s/1Qp9x6z8CN6puGfg-eNghig

    sql 查询速率测试

    • 通过 datetime 类型查询:
    select count(*) from users where time_date >="2018-10-21 23:32:44" and time_date <="2018-10-21 23:41:22"

    耗时:0.171

    • 通过 timestamp 类型查询
    select count(*) from users where time_timestamp >= "2018-10-21 23:32:44" and time_timestamp <="2018-10-21 23:41:22"

    耗时:0.351

    • 通过 bigint 类型查询
    select count(*) from users where time_long >=1540135964091 and time_long <=1540136482372  

    耗时:0.130s

    • 结论 在 InnoDB 存储引擎下,通过时间范围查找,性能 bigint > datetime > timestamp

    sql 分组速率测试

    使用 bigint 进行分组会每条数据进行一个分组,如果将 bigint 做一个转化再去分组就没有比较的意义了,转化也是需要时间的

    • 通过 datetime 类型分组:
    select time_date, count(*) from users group by time_date

    耗时:0.176s

    • 通过 timestamp 类型分组:
    select time_timestamp, count(*) from users group by time_timestamp

    耗时:0.173s

    • 结论 在 InnoDB 存储引擎下,通过时间分组,性能 timestamp > datetime,但是相差不大

    sql 排序速率测试

    • 通过 datetime 类型排序:
    select * from users order by time_date

    耗时:1.038s

    • 通过 timestamp 类型排序
    select * from users order by time_timestamp

    耗时:0.933s

    • 通过 bigint 类型排序
    select * from users order by time_long

    耗时:0.775s

    • 结论 在 InnoDB 存储引擎下,通过时间排序,性能 bigint > timestamp > datetime

    小结

    如果需要对时间字段进行操作 (如通过时间范围查找或者排序等),推荐使用 bigint,如果时间字段不需要进行任何操作,推荐使用 timestamp,使用 4 个字节保存比较节省空间,但是只能记录到 2038 年记录的时间有限

    展开全文
  • 下表列出了基本 SQL Server、JDBC 和 Java 编程语言数据类型之间的默认映射: SQL Server 类型JDBC 类型 (java.sql.Types)Java 语言类型 bigint BIGINT long timestamp binary BINARY byte[] ...

    下表列出了基本 SQL Server、JDBC 和 Java 编程语言数据类型之间的默认映射:

    SQL Server 类型JDBC 类型 (java.sql.Types)Java 语言类型

    bigint

    BIGINT

    long

    timestamp

    binary

    BINARY

    byte[]

    bit

    BIT

    boolean

    char

    CHAR

    String

    decimal

    money

    smallmoney

    DECIMAL

    java.math.BigDecimal

    float

    DOUBLE

    double

    int

    INTEGER

    int

    image

    varbinary(max)

    LONGVARBINARY

    byte[]

    varchar(max)

    text

    LONGVARCHAR

    String

    nchar

    CHAR

    NCHAR (Java SE 6.0)

    String

    nvarchar

    VARCHAR

    NVARCHAR (Java SE 6.0)

    String

    nvarchar(max)

    ntext

    LONGVARCHAR

    LONGNVARCHAR (Java SE 6.0)

    String

    numeric

    NUMERIC

    java.math.BigDecimal

    real

    REAL

    float

    smallint

    SMALLINT

    short

    datetime

    smalldatetime

    TIMESTAMP

    java.sql.Timestamp

    varbinary

    udt

    VARBINARY

    byte[]

    varchar

    VARCHAR

    String

    tinyint

    TINYINT

    short

    uniqueidentifier

    CHAR

    String

    xml

    LONGVARCHAR

    SQLXML (Java SE 6.0)

    String

    SQLXML

    time

    TIME (1)

    java.sql.Time (1)

    date

    DATE

    java.sql.Date

    datetime2

    TIMESTAMP

    java.sql.Timestamp

    datetimeoffset (2)

    microsoft.sql.Types.DATETIMEOFFSET

    microsoft.sql.DateTimeOffset

    展开全文
  • 下表列出了基本 SQL Server、JDBC 和 Java 编程语言数据类型之间的默认映射: SQL Server 类型 JDBC 类型 (java.sql.Types) Java 语言类型 bigint BIGINT long ...

    下表列出了基本 SQL Server、JDBC 和 Java 编程语言数据类型之间的默认映射:

     

    SQL Server 类型 JDBC 类型 (java.sql.Types) Java 语言类型

    bigint

    BIGINT

    long

    timestamp

    binary

    BINARY

    byte[]

    bit

    BIT

    boolean

    char

    CHAR

    String

    decimal

    money

    smallmoney

    DECIMAL

    java.math.BigDecimal

    float

    DOUBLE

    double

    int

    INTEGER

    int

    image

    varbinary(max)

    LONGVARBINARY

    byte[]

    varchar(max)

    text

    LONGVARCHAR

    String

    nchar

    CHAR

    NCHAR (Java SE 6.0)

    String

    nvarchar

    VARCHAR

    NVARCHAR (Java SE 6.0)

    String

    nvarchar(max)

    ntext

    LONGVARCHAR

    LONGNVARCHAR (Java SE 6.0)

    String

    numeric

    NUMERIC

    java.math.BigDecimal

    real

    REAL

    float

    smallint

    SMALLINT

    short

    datetime

    smalldatetime

    TIMESTAMP

    java.sql.Timestamp

    varbinary

    udt

    VARBINARY

    byte[]

    varchar

    VARCHAR

    String

    tinyint

    TINYINT

    short

    uniqueidentifier

    CHAR

    String

    xml

    LONGVARCHAR

    SQLXML (Java SE 6.0)

    String

    SQLXML

    time

    TIME (1)

    java.sql.Time (1)

    date

    DATE

    java.sql.Date

    datetime2

    TIMESTAMP

    java.sql.Timestamp

    datetimeoffset (2)

    microsoft.sql.Types.DATETIMEOFFSET

    microsoft.sql.DateTimeOffset

    展开全文
  • 数据库bigint提取成实体对象

    千次阅读 2017-10-11 14:20:50
    Mysql里有个数据类型bigintjava转换成实体对象时,处理不当容易出现以下异常: java.lang.ClassCastException: java.lang.Long ...当数据库中该属性添加unsigned,则在对象中对应的属性类型应该为BigInteger;

    Mysql里有个数据类型bigint
    在java转换成实体对象时,处理不当容易出现以下异常:
    java.lang.ClassCastException: java.lang.Long cannot be cast to java.math.BigInteger

    只需要注意以下情况,就可避免此类异常:
    当数据库中该属性添加unsigned,则在对象中对应的属性类型应该为BigInteger;
    当数据库中该属性未添加unsigned,则在对象中对应的属性类型应该为Long。

    展开全文
  • 一、mysql 对应java类型如下   类型名称 显示长度 数据库类型 JAVA类型 JDBC类型索引(int) VARCHAR L+N VARCHAR ...
  • 下表列出了基本 SQL Server、JDBC 和 Java 编程语言数据类型之间的默认映射:   SQL Server 类型 JDBC 类型 (java.sql.Types) Java 语言类型 bigint BIGINT ...
  • JDBC 类型 (java.sql.Types) Java 语言类型 bigint BIGINT long timestamp binary BINARY byte[] bit BIT ...
  • Mysql中BigintJava数据类型对应关系

    千次阅读 热门讨论 2020-11-27 22:32:53
    MySQL中,有符号类型 Bigint(20)的取值范围为-9223372036854775808~9223372036854775807,与Java.lang.Long的取值范围完全一致,mybatis/mybatis-plus会将 Bigint(20)映射为Long类型。 MySQL中,无符号类型Bigint(20...
  • MySQL中BIGINTJava数据类型对应问题

    万次阅读 多人点赞 2018-03-04 13:17:41
    问题背景: 最近在做的工作使用了mybatis框架,前两天有一个需求,中间涉及到一条sql,需要将某表中的最大最小主键取出来,mysql中该主键类型是BIGINT(20),我在xml文件中是这样写的:&lt;select id="...
  • 数据库类型和mapper中jdbc对应的类型 数据库类型 java数据类型 jdbc Type类型 bigint Long BIGINT tinyint Byte TINYINT smallint Short SMALLINT mediumint Integer INTEGER integer Integer ...
  • MYSQL数据库类型与JAVA类型对应表 类型名称 显示长度 数据库类型 JAVA类型 JDBC类型 索引(int) VARCHAR L+N VARCHAR java.lang.String 12 CHAR N CHAR java.lang...
  • jdbc中Bigint对应Long的一个小细节

    万次阅读 2018-07-19 22:30:08
    在开发时 bigint 对应 Long 才对,但是今天却出现了bigint对应BigInteger的现象,查了相关资料才发现一个小细节   如JDBC的BIGINT--&gt;Javajava.lang.Long; JDBC的BIGINT UNSIGNED--&gt;Java的 ...
  • mysql数据库BigInt数据类型和实体对象中BigInteger,Long类型的冲突   实体Bean public class Broke { /** * brokeid */ BigInteger brokeid; /** * 节点id 与 节点id为多对一的关系 */ ...
  • 类型名称 显示长度 数据库类型 JAVA类型 JDBC类型索引(int) 描述 VARCHAR L+N VARCHAR java.lang.String 12 CHAR N CHAR java.lang.String 1 字符型 BLOB L+N BLOB java.lang.byte[] -4 二进制型 TEXT ...
  • MYSQL数据库类型与JAVA类型对应表 类型名称 显示长度 数据库类型 JAVA类型 JDBC类型索引(int) VARCHAR L+N VARCHAR java.lang.String 12 CHAR N CHAR java.lang.String 1 BLOB L+N BLOB java.lang.byte...
  • bigint 有无符号的区别 这个问题是在实际工作中遇到的,是一个小的问题,但是如果不注意的话,造成的后续问题是比较严重的。下面就来重现一下这个问题。 首先我们先创建一张数据表,名为t_order. 位于test库中。 ...
  • 数据库数据类型对应java数据类型

    千次阅读 2016-08-31 09:22:52
    java.sql.Types 值 Java 类型 IBM DB2 Oracle Sybase SQL Informix IBM Content Manager   BIGINT java.lang.long BIGINT NUMBER (38, 0) BIGINT BIGINT INT8 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 19,494
精华内容 7,797
关键字:

数据库bigint对应java

java 订阅