2016-04-19 13 views
0

Ich verwende Liquibase des generateChangeLog Befehl wie folgt:Liquibase generateChangeLog ohne Spaltenlänge (MySQL)

liquibase --driver=com.mysql.jdbc.Driver \ 
    --classpath=$HOME/.m2/repository/mysql/mysql-connector-java/5.1.26/mysql-connector-java-5.1.26.jar \ 
    --changeLogFile=./db.changelog.xml \ 
    --url="jdbc:mysql://localhost:3306/db" \ 
    generateChangeLog 

Welche Protokoll XML Änderung gibt, ohne Spaltenlänge Definitionen für alle Spalten.

Beispiel:

<changeSet author="purecharger (generated)" id="1461081110463-2"> 
    <createTable tableName="account"> 
     <column name="id" type="BIGINT"> 
      <constraints nullable="false"/> 
     </column> 
     ... 
    </createTable> 
</changeSet> 

Spaltendefinition (Snippet):

Create Table: CREATE TABLE `account` (
    `id` bigint(20) NOT NULL, 
    ... 

Warum nicht die Changelog umfassen Länge, wie so?

<column name="id" type="BIGINT(20)"> 
    <constraints nullable="false"/> 
</column> 
+0

Länge von BIGINT-Datentyp impliziert? –

Antwort

1

In MySQL gibt BIGINT 8 Byte Speicherplatz, der für ganze Zahlen von -9223372036854775808 bis 9223372036854775807. BIGINT genug ist (20) nicht wirklich etwas bedeuten. MySQL akzeptiert dies großzügig.

Ausführliche Informationen zu dieser MySQL Seite: https://dev.mysql.com/doc/refman/5.5/en/integer-types.html

+0

Guter Punkt, aber warum liquibase nicht die Genauigkeit ausgeben, wenn das was mysql zeigt? – purecharger

+0

Sehr gute Frage. Es erscheint mir komisch, wenn die MySQL-Tools dies verfolgen. Was Liquibase tut, verwendet den JDBC-Treiber, um die Tabellen- und Spaltenmetadaten abzufragen. Ich habe nicht über den Code debuggt, aber ich stelle mir vor, dass der JDBC-Treiber entweder die Größe Daten nicht zurückgibt, dass Liquibase nicht nach Größe Daten sucht, oder dass Liquibase absichtlich die Größe Daten wegwirft. – SteveDonie