Liquibase:如何在MySQL数据库表上设置Charset UTF-8?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Liquibase:如何在MySQL数据库表上设置Charset UTF-8?相关的知识,希望对你有一定的参考价值。
我的Liquibase
变换集看起来像
<changeSet id="05192014.1525" author="h2">
<createTable tableName="network">
<column name="network_id" type="BIGINT(19) UNSIGNED">
<constraints nullable="false" primaryKey="true"/>
</column>
<column name="name" type="VARCHAR(300)">
<constraints nullable="false"/>
</column>
<column name="active" type="TINYINT(1)" defaultValue="1">
<constraints nullable="false"/>
</column>
<column name="created_at" type="TIMESTAMP" defaultValueComputed="CURRENT_TIMESTAMP">
<constraints nullable="false"/>
</column>
<column name="created_by" type="VARCHAR(100)"/>
<column name="updated_at" type="TIMESTAMP"/>
<column name="updated_by" type="VARCHAR(100)"/>
</createTable>
</changeSet>
- 我使用插件将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 element:
</createTable>
<modifySql dbms="mysql">
<append value="ENGINE=INNODB CHARSET=UTF8 COLLATE utf8_unicode_ci"/>
</modifySql>
如果需要charset / collate的每列规范(因为你可能想要列的不同字符集),以下内容对我有用(只需将CHARACTER SET和COLLATE子句附加到type
的column
attr值):
<createTable tableName="my_table">
<column name="some_column" type="VARCHAR(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci" >
<constraints nullable="false"/>
</column>
</createTable>
或者,您可以使用:
<createTable tableName="my_table">
<column name="some_column" type="VARCHAR(20)" >
<constraints nullable="false"/>
</column>
</createTable>
<modifySql dbms="mysql">
<replace replace="VARCHAR(20)" with="VARCHAR(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci" />
</modifySql>
你可以省略CHARACTER SET
而不是COLLATE
。
通过查看文档,Charset依赖于数据库,如果是这种情况,从您可以使用的文档判断
http://www.liquibase.org/documentation/changes/sql.html
查看MySql文档,您可以将此行插入:
<sql>ALTER TABLE tbl_name CONVERT TO CHARACTER SET charset_name;</sql>
通常,charset的配置是在数据库创建时完成的,你应该在你的liquibase配置文件中配置它,如下所示:
url: jdbc:mysql://localhost:3306/yourdatabasename?useUnicode=true&characterEncoding=utf8
欲了解更多信息,请参阅:https://dev.mysql.com/doc/refman/5.0/en/charset-applications.html
或者如果您已经使用不同的字符集创建了数据库,则可以尝试将其转换为:
How to convert an entire MySQL database characterset and collation to UTF-8?
以上是关于Liquibase:如何在MySQL数据库表上设置Charset UTF-8?的主要内容,如果未能解决你的问题,请参考以下文章
从 MySQL 中的现有表生成更改日志时,liquibase 如何处理自动递增的 PK?