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

day*_*mer 10 java mysql utf-8 liquibase maven

我的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>
Run Code Online (Sandbox Code Playgroud)
  • 我已经将liquibase与Maven使用插件集成在一起
  • 当我跑mvn clean install,它创建MySQL表格

CREATE TABLE network( network_idbigint(19)unsigned NOT NULL, namevarchar(300)NOT NULL, activetinyint(1)NOT NULL DEFAULT'1', created_attimestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
created_byvarchar(100)DEFAULT NULL, updated_attimestamp NULL DEFAULT NULL, updated_byvarchar(100 )DEFAULT NULL,PRIMARY KEY(network_id))ENGINE = InnoDB DEFAULT CHARSET = latin1;

一切看起来不错,除了 CHARSET=latin1

我怎么做CHARSET=UTF-8

小智 12

您可以在create table定义后使用modifySql元素:

</createTable>
<modifySql dbms="mysql">
    <append value="ENGINE=INNODB CHARSET=UTF8 COLLATE utf8_unicode_ci"/>
</modifySql>
Run Code Online (Sandbox Code Playgroud)


Pav*_* S. 7

如果需要按列指定字符集/排序规则(因为您可能需要为列设置不同的字符集),以下对我有用(只需将 CHARACTER SET 和 COLLATE 子句附加到typeattr 值column):

    <createTable tableName="my_table">
        <column name="some_column" type="VARCHAR(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci" >
            <constraints nullable="false"/>
        </column>
    </createTable>
Run Code Online (Sandbox Code Playgroud)

或者,您可以使用:

    <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>
Run Code Online (Sandbox Code Playgroud)

您可以省略,CHARACTER SET但不能省略COLLATE


Mat*_*ewJ 2

从文档来看,字符集是依赖于数据库的,如果是这样的话,从文档来看你可以使用

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

查看 MySql 文档,您可能只需插入这一行:

<sql>ALTER TABLE tbl_name CONVERT TO CHARACTER SET charset_name;</sql>
Run Code Online (Sandbox Code Playgroud)