使用Liquibase 3.1.1,我试图动态地在任意两个SQl服务器数据库之间迁移Db脚本。
我正在使用Liquibase的Diff和更新命令。它正在与Db一起工作,它不使用varchar(max)列。 对于使用varchar(max)列的DB,liquibase使用VARCHAR(2147483647)进行varchar(max),同时创建changelog,当它更新目标db时,抛出以下sql server异常。
liquibase.exception.DatabaseException: Error executing SQL CREATE TABLE [ASSET_ATTRIBUTE] ([ASSET_ATTR_ID] BIGINT IDENTITY (1, 1) NOT NULL, [ASSET_GUID] UNIQUEIDENTIFIER NOT NULL, [APP_ID] VARCHAR(30), [ATTR_TYPE] VARCHAR(30) NOT NULL, [ATTR_NAME] VARCHAR(50) NOT NULL, **[ATTR_VALUE_STRING] VARCHAR(2147483647)**, [ATTR_VALUE_DATE] datetime, CONSTRAINT [PK_ASSET_ATTRIBUTE] PRIMARY KEY ([ASSET_ATTR_ID])): The size (2147483647) given to the column 'ATTR_VALUE_STRING' exceeds the maximum allowed for any data type (8000).
at liquibase.executor.jvm.JdbcExecutor.execute(JdbcExecutor.java:61)
at liquibase.executor.jvm.JdbcExecutor.execute(JdbcExecutor.java:106)
at liquibase.database.AbstractJdbcDatabase.execute(AbstractJdbcDatabase.java:1189)
at liquibase.database.AbstractJdbcDatabase.executeStatements(AbstractJdbcDatabase.java:1172)
at liquibase.changelog.ChangeSet.execute(ChangeSet.java:352)
... 4 more
Caused by: com.microsoft.sqlserver.jdbc.SQLServerException: The size (2147483647) given to the column 'ATTR_VALUE_STRING' exceeds the maximum allowed for any data type (8000).
at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(SQLServerException.java:216)
at com.microsoft.sqlserver.jdbc.SQLServerStatement.getNextResult(SQLServerStatement.java:1515)
at com.microsoft.sqlserver.jdbc.SQLServerStatement.doExecuteStatement(SQLServerStatement.java:792) and some more
即使它是一个sql server异常,我需要通过liquibase修复它。 有没有解决这个问题? 为什么liquibase不将列类型存储为varchar(max),而不是varchar(2147483647),以便在更新期间不会抛出异常。
先谢谢