2017-07-20 56 views
0

MySQLにTIMESTAMPという日付を保存します。私はDateTypeHandlerがこの変換を行うことができるようだ。私は私のプロジェクトにそれを入れましたが、失敗しました。mybatis DateTypeHandlerはjavaの日付をSQLに変換できませんTIMESTAMP

私は「mapper.xml」で次の両方を試してみましたが、どちらも失敗しました。

<insert id="insertUser"> 
    insert into user (user_id, password, token, 
    register_time, user_type, account_type) values (
    #{userId}, 
    #{password}, #{token}, #{registerTime, jdbcType=TIMESTAMP, 
    javaType=java.util.Date, typeHandler=org.apache.ibatis.type.DateTypeHandler}, 
    #{userType}, 
    #{accountType} 
    ) 
</insert> 

<insert id="insertUser"> 
    insert into user (user_id, password, token, 
    register_time, user_type, account_type) values (
    #{userId}, 
    #{password}, #{token}, #{registerTime, typeHandler=org.apache.ibatis.type.DateTypeHandler}, 
    #{userType}, 
    #{accountType} 
    ) 
</insert> 

エラーログには、次の通りである:

org.springframework.dao.DataIntegrityViolationException: 
### Error updating database. Cause: com.mysql.jdbc.MysqlDataTruncation: 
Data truncation: Incorrect datetime value: '3892-04-19 00:00:00' for column 
'register_time' at row 1 
### The error may involve defaultParameterMap 
### The error occurred while setting parameters 
### SQL: insert into user (user_id, password, token, register_time, user_type, account_type) values ( ?, ?, ?, ?, ?, ? ) 
### Cause: com.mysql.jdbc.MysqlDataTruncation: Data truncation: Incorrect 
datetime value: '3892-04-19 00:00:00' for column 'register_time' at row 1 
; SQL []; Data truncation: Incorrect datetime value: '3892-04-19 00:00:00' 
for column 'register_time' at row 1; nested exception is com.mysql.jdbc.MysqlDataTruncation: Data truncation: org.springframework.dao.DataIntegrityViolationException: 

答えて

0

のMySQLのTIMESTAMPタイプのみ「に '1970-01-01 0時00分01秒' UTCの範囲内のデータ値を格納することができます2038- 01-19 03:14:07 'UTC、このタイプのregister_time列に値' 3892-04-19 00:00:00 'を挿入しようとしました。この将来の日付が正しいか、それがそうであるならば、この問題を解決することができ、あなたのmapper.xmlにjdbcType=DATETIMEjdbcType=TIMESTAMP,を変更した場合

Data truncation: Incorrect datetime value: '3892-04-19 00:00:00' for column register_time' at row 1 

チェック:これはエラーをスローします。 (MySQLのDATETIME型のサポート範囲は、「9999-12-31 23時59分59秒」から「1000年1月1日0時00分00秒」です

参考文献:。。MySql doc

+0

おかげであなたは助けるために私が見つかりました。私はJavaの日付を誤解しています。したがって、私は間違った日付を生成します。 – molly

関連する問題