Liquibase:如何在MySQL数据库表上设置Charset UTF-8?

问题描述 投票:10回答:4

我的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 networknetwork_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

java mysql maven utf-8 liquibase
4个回答
12
投票

您可以在创建表定义后使用modifySql element

</createTable>
<modifySql dbms="mysql">
    <append value="ENGINE=INNODB CHARSET=UTF8 COLLATE utf8_unicode_ci"/>
</modifySql>

2
投票

如果需要charset / collat​​e的每列规范(因为你可能想要列的不同字符集),以下内容对我有用(只需将CHARACTER SET和COLLATE子句附加到typecolumn 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


1
投票

通过查看文档,Charset依赖于数据库,如果是这种情况,从您可以使用的文档判断

http://www.liquibase.org/documentation/changes/sql.html

查看MySql文档,您可以将此行插入:

<sql>ALTER TABLE tbl_name CONVERT TO CHARACTER SET charset_name;</sql>

0
投票

通常,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?

© www.soinside.com 2019 - 2024. All rights reserved.