mysql+timestamp+坑_mysql TIMESTAMP 解决 方法

[MYSQL]Cannot convert value '0000-00-00 00:00:00' from column 6 to TIMESTAMP / Value '[B@XXXXXXX' can not be represented as java.sql.Timestamp 解法方法

Cannot convert value '0000-00-00 00:00:00' from column 6 to TIMESTAMP /Value '[B@XXXXXXX' can not be represented as java.sql.Timestamp 解法方法

1) 在URI后加上: &zeroDateTimeBehavior=convertToNul

这样一个参考的URI如下:

jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNul&transformedBitIsBoolean=true

2) 查看对应表记录中DATETIME取值,看是否存在一些非法取值,因为MYSQL DATETIME取值范围为:1000-01-01 00:00:00 - 9999-12-31 23:59:59

3) 查看记录中DATETIME值中是否存在这种情况,年、月、日、时、分、秒是否为0的情况,如,1990-01-01 00:00:00 及 1990-01-01 01:00:00都可能引起转换出错问题

具体的一些原因请详读下面的内容:

一、DATETIME转换注意的一些细节 Cannot convert value '0000-00-00 00:00:00' from column 1 to TIMESTAMP(http://hi.baidu.com/jjpro/blog/item/4dfc8900dae09581e950cd84.html)

在Mysql数据库中使用DATETIME类型来存储时间,使用JDBC中读取这个字段的时候,应该使用 ResultSet.getTimestamp(),这样会得到一个java.sql.Timestamp类型的数据。在这里既不能使用 ResultSet.getDate(),也不能使用ResultSet.getTime(),因为前者不包括time数据,后者不包括date数据。

但是在使用ResultSet.getTimestamp()时也不是完全安全的,例如,当数据库中的TIMESTAMP类型的字段值为 '0000-00-00 00:00:00'时,使用此方法进行读取,会抛出异常:Cannot convert value '0000-00-00 00:00:00' from column 1 to TIMESTAMP,这是因为JDBC不能将'0000-00-00 00:00:00'转化为一个为一个java.sql.Timestamp,在Java中,想创建一个java.util.Date,使其值为 '0000-00-00'也是不可能的,最古老的日期应该是'0001-01-01 00:00:00'。

那么在程序中该怎么办捏? 解决方案在这里:

Datetimes with all-zero components (0000-00-00 ...) — These values can not be represented reliably in Java. Connector/J 3.0.x always converted them to NULL when being read from a ResultSet.

Connector/J 3.1 throws an exception by default when these values are encountered as this is the most correct behavior according to the JDBC and SQL standards. This behavior can be modified using the zeroDateTimeBehavior configuration property. The allowable values are:

exception (the default), which throws an SQLException with an SQLState of S1009.

convertToNull, which returns NULL instead of the date.

round, which rounds the date to the nearest closest value which is 0001-01-01.

Starting with Connector/J 3.1.7, ResultSet.getString() can be decoupled from this behavior via noDatetimeStringSync=true (the default value is false) so that you can retrieve the unaltered all-zero value as a String. It should be noted that this also precludes using any time zone conversions, therefore the driver will not allow you to enable noDatetimeStringSync and useTimezone at the same time.

所以,在JDBC URL中加入zeroDateTimeBehavior信息,既可以解决:

String url = "jdbc:mysql://10.149.51.80:3306/test?relaxAutoCommit=true&zeroDateTimeBehavior=convertToNull";

当然,也可以使用另外一个策略:round。

二、MySQL中各种字段的取值范围(http://www.54chen.com/c/22)

TINYINT

-128 - 127

TINYINT UNSIGNED

0 - 255

SMALLINT

-32768 - 32767

SMALLINT UNSIGNED

0 - 65535

MEDIUMINT

-8388608 - 8388607

MEDIUMINT UNSIGNED

0 - 16777215

INT 或 INTEGER

-2147483648 - 2147483647

INT UNSIGNED 或 INTEGER UNSIGNED

0 - 4294967295

BIGINT

-9223372036854775808 - 9223372036854775807

BIGINT UNSIGNED

0 - 18446744073709551615

FLOAT

-3.402823466E+38 - -1.175494351E-38

0

1.175494351E-38 - 3.402823466E+38

DOUBLE 或 DOUBLE PRECISION 或 REAL

-1.7976931348623157E+308 - -2.2250738585072014E-308

0

2.2250738585072014E-308 - 1.7976931348623157E+308

DECIMAL[(M,[D])] 或 NUMERIC(M,D)

由M(整个数字的长度,包括小数点,小数点左边的位数,小数点右边的位数,但不包括负号)和D(小数点右边的位数)来决定,M缺省为10,D缺省为0

DATE

1000-01-01 - 9999-12-31

DATETIME

1000-01-01 00:00:00 - 9999-12-31 23:59:59

TIMESTAMP

1970-01-01 00:00:00 - 2037年的某天(具体是哪天我也不知道,呵呵)

TIME

-838:59:59′ to 838:59:59

YEAR[(2|4)]

缺省为4位格式,4位格式取值范围为1901 - 2155,0000,2位格式取值范围为70-69(1970-2069)

CHAR(M) [BINARY] 或 NCHAR(M) [BINARY]

M的范围为1 - 255,如果没有BINARY项,则不分大小写,NCHAR表示使用缺省的字符集.在数据库中以空格补足,但在取出来时末尾的空格将自动去掉.

[NATIONAL] VARCHAR(M) [BINARY]

M的范围为1 - 255.在数据库中末尾的空格将自动去掉.

TINYBLOB 或 TINYTEXT

255(2^8-1)个字符

BLOB 或 TEXT

65535(2^16-1)个字符

MEDIUMBLOB 或 MEDIUMTEXT

16777215 (2^24-1)个字符

LONGBLOB 或 LONGTEXT

4294967295 (2^32-1)个字符

ENUM(’value1′,’value2′,…)

可以总共有65535个不同的值

SET(’value1′,’value2′,…)

最多有64个成员

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: `CURRENT_TIMESTAMP` 是 MySQL 中的一个函数,用于返回当前日期和时间。它可以用作默认值或插入语句中的值。 当在表中创建一个字段时,可以将其默认值设置为 `CURRENT_TIMESTAMP`,这样每次插入一条新记录时,该字段就会自动填入当前的日期和时间。例如: ``` CREATE TABLE example ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(255) NOT NULL, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); ``` 以上语句将创建一个名为 `example` 的表,其中包含一个 `created_at` 字段,它的默认值为 `CURRENT_TIMESTAMP`。这样,在每次插入一条新记录时,`created_at` 字段就会自动填入当前的日期和时间。是的,您的理解是正确的。在 MySQL 中,`CURRENT_TIMESTAMP` 是一个函数,它用于获取当前日期和时间。可以将其用作表中字段的默认值,这样每次插入新记录时,该字段就会自动填入当前日期和时间。在上面的示例中,当插入一条新记录时,`created_at` 字段将自动填入当前的日期和时间。是的,您的理解是正确的。在 MySQL 中,`CURRENT_TIMESTAMP` 是一个函数,它用于获取当前日期和时间。可以将其用作表中字段的默认值,这样每次插入新记录时,该字段就会自动填入当前日期和时间。在上面的示例中,当插入一条新记录时,`created_at` 字段将自动填入当前的日期和时间。是的,您的理解是正确的。在 MySQL 中,`CURRENT_TIMESTAMP` 是一个函数,它用于获取当前日期和时间。可以将其用作表中字段的默认值,这样每次插入新记录时,该字段就会自动填入当前日期和时间。在上面的示例中,当插入一条新记录时,`created_at` 字段将自动填入当前的日期和时间。是的,您的理解是正确的。在 MySQL 中,`CURRENT_TIMESTAMP` 是一个函数,它用于获取当前日期和时间。可以将其用作表中字段的默认值,这样每次插入新记录时,该字段就会自动填入当前日期和时间。在上面的示例中,当插入一条新记录时,`created_at` 字段将自动填入当前的日期和时间。是的,您的理解是正确的。在 MySQL 中,`CURRENT_TIMESTAMP` 是一个函数,它用于获取当前日期和时间。可以将其用作表中字段的默认值,这样每次插入新记录时,该字段就会自动填入当前日期和时间。在上面的示例中,当插入一条新记录时,`created_at` 字段将自动填入当前的日期和时间。MySQL中的current_timestamp函数返回当前的日期和时间。这个函数可以用于设置默认值或插入新数据时记录时间戳。如果使用UTC时区,可以使用UTC_TIMESTAMP函数获取当前时间戳。此外,还可以使用NOW()函数来获取当前日期和时间,其与current_timestamp函数等价。 是的,您的理解是正确的。在 MySQL 中,`CURRENT_TIMESTAMP` 是一个函数,它用于获取当前日期和时间。可以将其用作表中字段的默认值,这样每次插入新记录时,该字段就会自动填入当前日期和时间。在上面的示例中,当插入一条新记录时,`created_at` 字段将自动填入当前的日期和时间。 除了 `CURRENT_TIMESTAMP`,还有其他函数可以返回当前日期和时间,例如 `NOW()` 和 `UTC_TIMESTAMP()`。这些函数的作用与 `CURRENT_TIMESTAMP` 相同,都可以用于设置默认值或插入新数据时记录时间戳。但请注意,它们返回的日期和时间可能会受到系统时区设置的影响。如果需要在 UTC 时区中获取当前日期和时间,应使用 `UTC_TIMESTAMP()` 函数。MySQL中的CURRENT_TIMESTAMP函数是用于获取当前日期和时间的函数。它返回一个表示当前日期和时间的日期时间值。这个函数可以用于在INSERT或UPDATE语句中设置日期时间列的默认值,也可以用于在SELECT语句中返回当前日期和时间。当没有传递参数时,该函数默认使用当前系统时间。 当前MySQL时间戳是:CURRENT_TIMESTAMP()。MySQL的CURRENT_TIMESTAMP函数用于返回当前日期和时间。它可以用作默认值,以确保在插入新行时,该列始终包含当前时间戳。在使用该函数时,需要注意时区的设置,以确保得到正确的结果。例如,可以使用如下的语句获取当前时间戳: SELECT CURRENT_TIMESTAMP; 这将返回一个类似于'2023-02-26 08:12:34'的时间戳,其中日期部分表示当前日期,时间部分表示当前时间。MySQL中的current_timestamp函数返回当前系统日期和时间的时间戳。它可以用于插入当前时间戳到一个表格中的某个列中,也可以用于在查询中获取当前时间戳。需要注意的是,current_timestamp函数返回的时间戳依赖于MySQL服务器所在的时区。`CURRENT_TIMESTAMP` 是 MySQL 中一个系统函数,用于获取当前的日期和时间,包括年、月、日、小时、分钟和秒。在 MySQL 中,可以使用 `CURRENT_TIMESTAMP` 函数来获取当前的系统时间。 例如,可以使用以下 SQL 语句来插入当前时间到一个表中的一个时间戳字段: ``` INSERT INTO mytable (timestamp_column) VALUES (CURRENT_TIMESTAMP); ``` 这将插入当前日期和时间到 `mytable` 表中的 `timestamp_column` 字段中。 现在的时间是 MySQL 的 CURRENT_TIMESTAMP() 函数返回的值。MySQL函数CURRENT_TIMESTAMP返回当前系统日期和时间。它返回一个DATETIME值,表示当前时间戳(也称为当前日期和时间)。它可以用作插入或更新表中的时间戳列。如果你在一个SELECT语句中使用它,它将返回一个常数值,因为它只被计算一次,然后对每一行返回相同的值。 `mysql current_timestamp` 是 MySQL 数据库中的一个函数,用于返回当前系统时间。它的返回值是一个时间戳,格式为 `YYYY-MM-DD HH:MM:SS`,表示当前系统时间的年、月、日、时、分、秒。这个函数通常用于在插入或更新数据时记录时间戳,以便跟踪数据的变化情况。 现在的时间是MySQL的current_timestamp函数返回的值。`CURRENT_TIMESTAMP`是MySQL中的一个函数,它返回当前的日期和时间。可以使用它来插入当前时间戳或者作为查询条件进行比较。在MySQL中,它可以作为默认值使用,以便在插入新记录时自动记录时间戳。MySQL的函数CURRENT_TIMESTAMP用于返回当前日期和时间。它返回一个带有日期和时间的DATETIME值,可以用于记录某些操作发生的时间,或者作为默认值赋给DATETIME类型的列。当使用CURRENT_TIMESTAMP时,MySQL会基于当前的系统日期和时间自动为你生成一个值。 MySQL函数`CURRENT_TIMESTAMP`返回当前日期和时间。具体来说,它返回当前日期和时间的时间戳,包括年、月、日、小时、分钟和秒。使用该函数时,MySQL会根据系统时区返回日期和时间。如果您需要在MySQL中获取当前日期和时间,那么`CURRENT_TIMESTAMP`是一个方便的函数,它可以帮助您实现这个目标。MySQL函数`CURRENT_TIMESTAMP`用于返回当前日期和时间,它基于服务器的当前日期和时间,精确到秒级。它可以用作默认值或插入语句中的值。在MySQL中,还有其他几个类似的日期和时间函数,如`NOW()`和`LOCALTIME()`。 当前时间是mysql函数CURRENT_TIMESTAMP()的返回值。MySQL函数`CURRENT_TIMESTAMP`返回当前日期和时间。它返回一个日期时间值,格式为'YYYY-MM-DD HH:MM:SS',表示当前时间戳。在MySQL中,可以将其用作默认值或将其插入到表中的列中。例如,以下语句将当前日期和时间插入到'created_at'列中: ``` INSERT INTO my_table (created_at, some_data) VALUES (CURRENT_TIMESTAMP, 'some value'); ``` 还可以使用`NOW()`函数来获取当前日期和时间,它与`CURRENT_TIMESTAMP`的行为类似。两者之间的主要区别是,`NOW()`函数返回一个字符串而不是一个日期时间值。 现在的时间是 MySQL 的 CURRENT_TIMESTAMP 函数返回的值。MySQL中的CURRENT_TIMESTAMP函数返回当前的日期和时间。它可以用于插入或更新表中的时间戳列,以便记录数据的创建或修改时间。在执行SELECT查询时,使用CURRENT_TIMESTAMP可以获取当前的日期和时间,以便进行比较或计算。如果需要特定的日期或时间格式,可以使用MySQL的日期和时间函数对CURRENT_TIMESTAMP进行格式化。"CURRENT_TIMESTAMP" 是 MySQL 数据库中的一个函数,它返回当前日期和时间的值。在 MySQL 中,可以将其用作列的默认值,以便在插入新行时自动将当前日期和时间添加到该列中。例如,可以使用以下语句创建一个名为 "orders" 的表,其中 "created_at" 列将自动设置为当前日期和时间: CREATE TABLE orders ( id INT PRIMARY KEY, customer_name VARCHAR(50), total_amount DECIMAL(10,2), created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); 当插入新行时,可以省略 "created_at" 列的值,MySQL 将自动将当前日期和时间添加到该列中,如下所示: INSERT INTO orders (id, customer_name, total_amount) VALUES (1, 'John Smith', 100.00); 这将插入一行到 "orders" 表,其中 "created_at" 列的值将是当前日期和时间。`mysql current_timestamp` 是一个 MySQL 数据库系统函数,它返回当前日期和时间。它可以在 INSERT 或 UPDATE 语句中使用,以便在表中插入或更新记录时将当前日期和时间添加到相应的列中。该函数还可以用作 SELECT 语句中的值。`CURRENT_TIMESTAMP` 是 MySQL 中的一个函数,它返回当前日期和时间。如果在一个字段中使用 `CURRENT_TIMESTAMP`,则该字段将在插入或更新行时自动设置为当前日期和时间。该函数的返回值格式为`YYYY-MM-DD HH:MM:SS`,即年-月-日 时:分:秒。MySQL中的current_timestamp是一个系统函数,用于返回当前的日期和时间。它可以以多种格式使用,例如: 1. SELECT CURRENT_TIMESTAMP(); -- 返回当前日期和时间的标准格式,例如 2023-02-28 11:23:45 2. SELECT CURRENT_TIMESTAMP + INTERVAL 1 DAY; -- 返回当前日期和时间加上一天的结果,例如 2023-03-01 11:23:45 3. SELECT DATE(CURRENT_TIMESTAMP); -- 返回当前日期,例如 2023-02-28 4. SELECT TIME(CURRENT_TIMESTAMP); -- 返回当前时间,例如 11:23:45 这些示例只是current_timestamp函数在MySQL中的几种用法。您可以根据需要使用不同的格式和参数来获取您需要的日期和时间信息。MySQL函数CURRENT_TIMESTAMP用于获取当前的日期和时间。它返回一个日期时间值,表示当前的日期和时间,格式为'YYYY-MM-DD HH:MM:SS',其中YYYY表示四位数的年份,MM表示两位数的月份,DD表示两位数的日期,HH表示两位数的小时,MM表示两位数的分钟,SS表示两位数的秒钟。在MySQL中,可以将CURRENT_TIMESTAMP用作表达式,也可以将其作为默认值来设置表中的时间戳列。MySQL中的CURRENT_TIMESTAMP函数返回当前日期和时间。它可以用于创建具有时间戳的行或更新时间戳列。使用CURRENT_TIMESTAMP函数时,MySQL服务器将根据其当前系统日期和时间生成一个时间戳。`CURRENT_TIMESTAMP` 是 MySQL 中一个用于获取当前时间戳的函数,它返回当前日期和时间的值,包括年、月、日、小时、分钟和秒,格式为 'YYYY-MM-DD HH:MM:SS'。它可以用于插入记录时自动记录时间戳,也可以用于查询时获取当前时间。MySQL 中的 `CURRENT_TIMESTAMP` 函数用于获取当前日期和时间。 您可以在 MySQL 查询中使用 `CURRENT_TIMESTAMP` 函数来检索当前日期和时间,例如: ```mysql SELECT CURRENT_TIMESTAMP; ``` 这将返回一个包含当前日期和时间的时间戳。您还可以将 `CURRENT_TIMESTAMP` 用作表的默认值,以确保在插入行时自动记录当前日期和时间,例如: ```mysql CREATE TABLE my_table ( id INT, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); ``` 这将创建一个名为 `my_table` 的表,其中包含一个名为 `created_at` 的列,它将在插入行时自动记录当前日期和时间。 希望这能回答您的问题! ### 回答2: MySQL 中的 current_timestamp 是一个函数,它返回当前的日期和时间戳。它的语法如下: current_timestamp() 它不需要任何参数,当它被执行时,它将返回当前日期和时间戳。日期和时间戳的格式为 "YYYY-MM-DD HH:MM:SS",其中,YYYY 是年份,MM 是月份,DD 是日期,HH 是小时,MM 是分钟,SS 是秒。 在MySQL中,current_timestamp 函数可以用于许多不同的场景。例如,你可以在创建一个表时使用它来设置一个默认的日期和时间戳值。这样,在插入新记录时如果没有提供日期和时间戳,系统就会自动为它们设置当前的值。 另一个例子是,你可以使用 current_timestamp 来比较表中的日期和时间戳值。例如,你可以使用它来查找在过去24小时内被创建或更新的记录。 除了 current_timestamp 函数之外,MySQL 还支持其他日期和时间戳函数,如 now()、utc_timestamp()、unix_timestamp(),这些函数在日期和时间戳处理时也非常有用。 总之,MySQL 的 current_timestamp 函数是非常方便的日期和时间戳函数之一。无论是用于设置默认值、查询或比较值,它都是一个非常有用的工具。 ### 回答3: MySQL中current_timestamp是一种时间戳函数,它返回当前日期和时间的值。它包含了日期和时间两个方面的信息。 在使用current_timestamp时,需要注意它的返回值类型为timestamp类型,可以按照需要进行转换为其他时间格式。在使用中,可能会存在时区问题,可以通过设置时区进行调整。同时,current_timestamp的返回值会随系统时间的变化而变化,因此需要根据实际需求选择使用。 在MySQL中,可以在表的字段中使用current_timestamp来设置默认值,这样在插入数据时,该字段的值会自动设为当前时间。同时,可以通过使用该函数来比较不同时间之间的先后顺序,以及进行时间计算和转换等操作。 当然,在使用current_timestamp时,也需要注意一些常见的问题,例如可能会因为服务器的时间不同步而导致数据不准确,或者可能某些特性需要更高的MySQL版本才能支持等。在实际应用中,需要根据具体情况进行选择和设置,以确保结果的准确性和可靠性。 总而言之,MySQL的current_timestamp是一种非常实用的时间戳函数,可以方便地获取当前时间的值,同时也可以进行时间比较、计算和转换等操作,具有广泛的应用价值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值