java - springboot - Inserción de liquibase en la columna BIT, MySQL, datos demasiado largos para la columna
spring boot liquibase support (4)
En mi caso con MariaDB tenía que ser:
<column name="show_in_app_directory" type="bit" valueBoolean="true" />
Al omitir ''type = "bit" como lo sugiere dustin.schultz, aparece un error de validación de Liquibase:
column ''type'' is required for all columns
En Liquibase, defino una tabla con una columna de tipo BIT (1)
<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>
En el conjunto de cambios posterior, quiero insertar datos en esta tabla, sin embargo, cuando inserto datos en la columna ''activa'' de tipo BIT (1), MySQL se queja ''Truncamiento de datos: Datos demasiado largos para la columna''
Yo he tratado:
<insert>
<column name="active" value="1" type="BIT(1)" />
</insert>
y
<insert>
<column name="active" value="1"/>
</insert>
y
<insert>
<column name="active" value="TRUE" type="BOOLEAN"/>
</insert>
¿Cuál es la forma correcta de insertar en una columna BIT (1)?
En mi caso, estaba usando loadData en lugar de insertar, y tuve que usar lo siguiente:
<column name="active" type="boolean"/>
Hay un caso similar al cargar registros por tabla desde archivos csv con <loadData>
. En el elemento <loadData>
, debe especificar explícitamente el tipo para cada columna booleana en la tabla:
<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>
Espero que ayude a otras personas que aterrizaron aquí teniendo problemas con esto.
Respondiendo a mi propia pregunta, ya que me di cuenta de esto justo después de publicarla. Para insertar en una columna BIT (1), debe definir el valor como valueBoolean
<insert>
<column name="active" valueBoolean="true"/>
</insert>