将数据从csv文件插入表时使用mysql jdbc的数据截断错误

时间:2018-03-06 16:37:43

标签: mysql eclipse jdbc

我使用“load data local infile”将.csv文件中的数据插入到eclipse中的MySQl数据库表中。但是,我收到如下所示的错误消息。

线程“main”中的异常com.mysql.jdbc.MysqlDataTruncation:数据截断:日期值不正确:第1行第'startYear'列的'1894'

示例数据: tconst_titles,titleType,primaryTitle,originalTitle,isAdult,startYear,endYear,runtimeMinutes

TT1,短,卡门,卡门,0,1894,0000,1

tt2,简称,Le clown et ses chiens,chiens,0,1892,0000,5

类似的线程提到它与日期值不正确的格式有关。但是,我已经将“startYear”声明为创建表格的日期,它应该将“1894”识别为一年不应该吗?

创建表格的代码:

String sql1 = "CREATE TABLE Titles" +

          "(tconst_titles VARCHAR(255) PRIMARY KEY, " +

          " titleType VARCHAR(255), " + 

          " primaryTitle VARCHAR(255), " + 

          " originalTitle VARCHAR(255), " + 

          " isAdult TINYINT(1), " + 

          " startYear DATE, " + 

          " endYear DATE, " + 

          " runtimeMinutes INT)";

从.csv文件插入数据的代码:

import java.sql.*;

public class populate { 

    public static void main(String[] args) throws SQLException {

        Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/IMDB","root","user");
        Statement stmt = con.createStatement();
        String sql = 
        "load data local infile 'titles.csv' \n" +
        "   replace \n" +
        "   into table Titles \n" +
        "   columns terminated by '\\t' \n" +
        "   ignore 1 lines";
        stmt.execute(sql);
      }
}

1 个答案:

答案 0 :(得分:1)

https://dev.mysql.com/doc/refman/5.7/en/datetime.html说:

  

DATE类型用于具有日期部分但没有时间部分的值。 MySQL在' YYYY-MM-DD'中检索并显示DATE值。格式。支持的范围是' 1000-01-01'到' 9999-12-31'。

您的数据仅 YYYY 。这没有月份或日期,因此它不是MySQL所需格式的日期。

如果您只想存储没有月份或日期的年份,请使用YEAR data type,如果您的值在1901 - 2155的支持范围内。

如果您有其他年份(例如您有1894年),请使用SMALLINT UNSIGNED