0

DB をアップグレード/移行しようとすると、例外が発生するようです。特定の行、つまり48586に到達するまで機能しているようです。データが破損しているかのように再テストしましたが、同じことが再び起こりました。mysql が行おうとしているのは、テーブル Logs の現在の主キーを削除してから、新しい主キーを追加することですIP, logId, logTime.

SEVERE 10/15/12 2:27 PM:liquibase: Error executing SQL ALTER TABLE `Logs` ADD PRIMARY KEY (`IP`, `logId`, `logTime`)
java.sql.SQLException: Data truncated for column 'logTime' at row 48586
        at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1073)
        at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3597)
        at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3529)
        at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1990)
        at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2151)
        at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2619)
        at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2569)
        at com.mysql.jdbc.StatementImpl.execute(StatementImpl.java:824)
        at com.mysql.jdbc.StatementImpl.execute(StatementImpl.java:667)
        at liquibase.executor.jvm.JdbcExecutor$1ExecuteStatementCallback.doInStatement(JdbcExecutor.java:92)
        at liquibase.executor.jvm.JdbcExecutor.execute(JdbcExecutor.java:55)
        at liquibase.executor.jvm.JdbcExecutor.execute(JdbcExecutor.java:105)
        at liquibase.database.AbstractDatabase.execute(AbstractDatabase.java:1014)
        at liquibase.database.AbstractDatabase.executeStatements(AbstractDatabase.java:998)
        at liquibase.changelog.ChangeSet.execute(ChangeSet.java:317)
        at liquibase.changelog.visitor.UpdateVisitor.visit(UpdateVisitor.java:27)
        at liquibase.changelog.ChangeLogIterator.run(ChangeLogIterator.java:58)
        at liquibase.Liquibase.update(Liquibase.java:113)
        at liquibase.integration.commandline.Main.doMigration(Main.java:684)
        at liquibase.integration.commandline.Main.main(Main.java:116)
4

1 に答える 1

2

MySQL Glossaryに記載されているとおり:

主キー

テーブル内のすべての行を一意に識別することができる一連の列 (および暗黙的に、この一連の列に基づくインデックス)。そのため、値を含まない一意のインデックスである必要がありNULLます。

CREATE TABLESyntaxの下で、マニュアルは次のように説明します。

APRIMARY KEYは、すべてのキー列を として定義する必要がある一意のインデックスNOT NULLです。それらが として明示的に宣言されていない場合NOT NULL、MySQL はそれらを暗黙的に (そしてサイレントに) 宣言します。

logTime列に値が許可されている (および含まれている)ように見えNULLます。それを超えてを作成しようとするとPRIMARY KEY、列が暗黙のうちに として宣言され、その結果、すべての値が列のデフォルト値にNOT NULL「切り詰められ」ました。エラーは に似ています。NULLER_WARN_NULL_TO_NOTNULL

于 2012-10-19T10:38:45.907 に答える