2015-07-06 12 views
12

In Liquibase, ho definire una tabella con una colonna di tipo BIT (1)Liquibase inserimento nella colonna BIT, MySQL, dati troppo lungo per colonna

<changeSet author="foobar" id="create-configuration-table"> 
    <createTable tableName="configuration"> 
     <column autoIncrement="true" name="id" type="BIGINT(19)"> 
      <constraints primaryKey="true" /> 
     </column> 
     <column name="active" type="BIT(1)" /> 
     <column name="version" type="INT(10)" /> 
    </createTable> 
</changeSet> 

Nella successiva di modifiche, voglio inserire dati in questa tabella, tuttavia, quando si inseriscono i dati nella colonna 'attivo' di tipo BIT (1), MySQL lamenta 'troncamento dei dati: I dati troppo lungo per la colonna'

ho provato:

<insert> 
    <column name="active" value="1" type="BIT(1)" /> 
</insert> 

e

<insert> 
    <column name="active" value="1"/> 
</insert> 

e

<insert> 
    <column name="active" value="TRUE" type="BOOLEAN"/> 
</insert> 

Qual è il modo corretto di inserire in un BIT (1) Colonna?

+0

lì è un [problema aperto] (https://liquibase.jira.com/browse/CORE-1991) su quello – Paizo

risposta

19

Rispondere alla mia domanda come ho capito subito dopo averlo pubblicato. Per inserire in una colonna BIT (1), è necessario definire il valore come valueBoolean

<insert> 
    <column name="active" valueBoolean="true"/> 
</insert> 
2

Nel mio caso, stavo usando loadData invece di inserimento, e ho dovuto utilizzare il seguente:

<column name="active" type="boolean"/> 
+0

Per indicare che il valore da inserire è un bit (o più bit) Mysql e MariaDB usano le notazioni: b'0 'rispettivamente b'1' o per più bit, ad es. b'00100110 ' –

7

C'è un caso simile durante il caricamento di record per tabella da file CSV con <loadData>. Nell'elemento <loadData>, è necessario specificare esplicitamente il tipo per ogni colonne booleane nella tabella:

<loadData encoding="UTF-8" 
      file="path/to/file.csv" 
      separator="," 
      tableName="MY_TABLE" 
> 
    <!-- specify that values in my_boolean_column should be interpreted as Boolean values --> 
    <column name="my_boolean_column" type="BOOLEAN" /> 
</loadData> 

Speranza che aiuta altre persone che sbarcarono qui problemi con questo.

+0

Non ha funzionato per me. Liquibase tenta ancora di inserire "1" nella colonna. –

0

Nel mio caso con MariaDB che doveva essere:

<column name="show_in_app_directory" type="bit" valueBoolean="true" /> 

Tralasciando 'type = "po"', come suggerito dal dustin.schultz ottengo un errore di convalida Liquibase:

column 'type' is required for all columns