我的Liquibase变更集看起来像
我已经使用插件将liquibase与Maven集成在一起
当我运行mvn clean install时,它会创建MySQL表,例如
CREATE TABLE network ( network_id bigint(19) unsigned NOT NULL,
name varchar(300) NOT NULL, active tinyint(1) NOT NULL DEFAULT
'1', created_at timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
created_by varchar(100) DEFAULT NULL, updated_at timestamp NULL
DEFAULT NULL, updated_by varchar(100) DEFAULT NULL, PRIMARY KEY
(network_id) ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
除了CHARSET=latin1之外,其他所有内容看起来都不错
题
如何制作CHARSET=UTF-8?
您是否尝试过将其强制替换为所需的值?
您可以在创建表定义之后使用ModifySql元素:
是否可以在启动db迁移过程时在单独的内部编写文件,如果数据库已经部署在其他地方,则会引发错误。
或这个
我对这些更改需要手动添加吗? 我希望liquibase可以将其检测为liquibase:diff的一部分
如果需要按列指定字符集/排序规则(因为您可能希望为列使用不同的字符集),则以下内容对我有用(只需将CHARACTER SET和COLLATE子句附加到column的type attr值):
或者,您可以使用:
您可以省略CHARACTER SET,但不能省略COLLATE。
您使用哪个Liquibase版本进行了测试? 在3.4.1中似乎不起作用
@jso已使用3.5.3版进行了测试。
通过查看文档,Charset取决于数据库,如果是这种情况,从文档可以判断,您可以使用
http://www.liquibase.org/documentation/changes/sql.html
查看MySql文档,您可能只需将以下行插入:
ALTER TABLE tbl_name CONVERT TO CHARACTER SET charset_name;
当表中有外键时不起作用
通常,字符集的配置是在数据库创建时完成的,您应该像这样在liquibase配置文件中对其进行配置:
url: jdbc:mysql://localhost:3306/yourdatabasename?useUnicode=true&characterEncoding=utf8
有关更多信息,请参见:https://dev.mysql.com/doc/refman/5.0/en/charset-applications.html
或者,如果您已经用其他字符集创建了数据库,则可以尝试将其转换,请参见:
如何将整个MySQL数据库字符集和排序规则转换为UTF-8?