databasechangelog and charset


I am looking into using liquibase for our project.  We currently use Firebird 2.x  for development.  We set the default character set in Firebird to UTF8.  This is causing liquibase some problems. 

When liquibase is run in update mode for the first time, the following error is generated:

Migration Failed: GDS Exception. 335544351. unsuccessful metadata update
key size exceeds implementation restriction for index “PK_DATABASECHANGELOG”

In doing some research, it seems liquibase limits index key size to a quarter of the page size (
In our case, the page size is set to 4k, which would give a total key size of 1020 bytes.

The DATABASECHANGELOG table has three columns making up the primary key:
id        varchar(63)
author  varchar(63)
filename varchar(200)

and since the database defaults to UTF8, the total key size is 1632 bytes.    Thus the error message. :( 

We need to have the DB default to UTF8.  So is there some setting that will instruct liquibase to use ISO8859_1 as the charset when creating these columns?

One option might be to create this table outside of liquibase.  In development mode where you want to drop and recreate the DB many times, this isn’t ideal.  Is their a better way?


There isn’t a setting currently.  If you are running liquibase in a way that you can override the Database implementation used (ant and command line I believe), you can override FirebirdDatabase to return new createDatabaseChangeLog sql.  Note: how you do this will be very different in 2.0.

If you create the table first, everything will work just fine.  liquibase will see it exists and skip the create.  I created an issue so it gets resolved permanently.