JDB C - MySQL отметка времени - код ошибки: 1292. Неверное значение даты и времени - PullRequest
0 голосов
/ 30 апреля 2020

Я практиковал JDB C. Для базы данных я использовал MySql 8.0.18 (MySql Workbench). Но когда я пытаюсь вставить значение метки времени, я получаю исключение.

JDB C код:

package jdbc;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;

public class setupMySqlDatabase {
    public static void main(String args[]) {
        String url = "jdbc:mysql://127.0.0.1:3306/employee?serverTimezone=UTC";
        String user = "JDBCUser";
        String password = "JDBCUser";
        try(Connection conn = DriverManager.getConnection(url, user, password);
                Statement stmt = conn.createStatement()) {
            Class.forName("com.mysql.cj.jdbc.Driver").newInstance();
            stmt.executeUpdate("CREATE TABLE species ("
                       + "id INTEGER PRIMARY KEY, "
                       + "name VARCHAR(255), "
                       + "num_acres DECIMAL)");
                       stmt.executeUpdate(
                       "CREATE TABLE animal ("
                       + "id INTEGER PRIMARY KEY, "
                       + "species_id integer, "
                       + "name VARCHAR(255), "
                       + "date_born TIMESTAMP)");

                       stmt.executeUpdate("INSERT INTO species VALUES (1, 'African Elephant', 7.5)");
                       stmt.executeUpdate("INSERT INTO species VALUES (2, 'Zebra', 1.2)");

                       stmt.executeUpdate("INSERT INTO animal VALUES (1, 1, 'Elsa', '2001−05−06 00:02:15')");
                       stmt.executeUpdate("INSERT INTO animal VALUES (2, 2, 'Zelda', '2002−08−15 09:12')");
                       stmt.executeUpdate("INSERT INTO animal VALUES (3, 1, 'Ester', '2002−09−09 10:36')");
                       stmt.executeUpdate("INSERT INTO animal VALUES (4, 1, 'Eddie', '2010−06−08 01:24')");
                       stmt.executeUpdate("INSERT INTO animal VALUES (5, 2, 'Zoe', '2005−11−12 03:44')");
        }catch(Exception ex) {
            ex.printStackTrace();
        }
    }
}

Когда я запускаю этот код, я получаю ниже исключения.

com.mysql.cj.jdbc.exceptions.MysqlDataTruncation: Data truncation: Incorrect datetime value: '2001−05−06 00:02:15' for column 'date_born' at row 1
    at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:104)
    at com.mysql.cj.jdbc.StatementImpl.executeUpdateInternal(StatementImpl.java:1335)
    at com.mysql.cj.jdbc.StatementImpl.executeLargeUpdate(StatementImpl.java:2108)
    at com.mysql.cj.jdbc.StatementImpl.executeUpdate(StatementImpl.java:1245)
    at jdbc.setupMySqlDatabase.main(setupMySqlDatabase.java:29)

Я не мог понять, почему произошла эта ошибка !!

1 Ответ

3 голосов
/ 30 апреля 2020

Это тире! Используйте простые тире, а не en-da sh или em-da sh (как вы используете). Вы, вероятно, набрали код в текстовом редакторе ранее.

Изменить:

stmt.executeUpdate(
  "INSERT INTO animal VALUES (1, 1, 'Elsa', '2001−05−06 00:02:15')")

на:

stmt.executeUpdate(
  "INSERT INTO animal VALUES (1, 1, 'Elsa', '2001-05-06 00:02:15')")

Вы заметили разницу? Первый использует Unicode Character - (U + 2212) , а не простые тире.

...