2015-07-06 12 views
12

W Liquibase definuję stół kolumny typu BIT (1)Liquibase wkładania do kolumny BIT MySQL dane zbyt długo na kolumnie

<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> 

W kolejnym changeset, chce wprowadzania danych do ta tabela pokazuje, podczas wprowadzania danych do „aktywnego” kolumny typu BIT (1), MySQL podnosi „obcinanie danych: dane zbyt długo na kolumnie”

próbowałem:

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

i

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

i

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

Jaki jest prawidłowy sposób wstawić do (1) kolumny BIT?

+0

tam jest [otwarty problem] (https://liquibase.jira.com/browse/CORE-1991) na tym – Paizo

Odpowiedz

19

Odpowiadając na moje własne pytanie, gdy to wymyśliłem zaraz po tym, jak je opublikowałem. Aby wstawić do (1) kolumny BIT, trzeba określić wartość jako valueBoolean

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

W moim przypadku, używałem loaddata zamiast wkładki, i musiałem użyć następujących:

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

Aby wskazać, że wartość do wstawienia jest bitem (lub wieloma bitami), Mysql i MariaDB używają notacji: b'0 'odpowiednio b'1' lub dla wielu bitów, np. b'00100110 ' –

7

Istnieje podobny przypadek podczas ładowania rekordów na tabelę z plików CSV pod numerem <loadData>. W elemencie <loadData>, trzeba jednoznacznie określić dla każdego typu Boolean kolumn w tabeli:

<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> 

Nadzieja pomaga innych ludzi, którzy wylądowali tu kłopoty z tym.

+0

To nie działa dla mnie. Liquibase nadal próbuje wstawić "1" do kolumny. –

0

W moim przypadku z MariaDB to musiało być:

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

Pomijając 'type = "bit"' jak sugeruje dustin.schultz pojawia się błąd walidacji Liquibase:

column 'type' is required for all columns 
Powiązane problemy