Liquibase:如何在MySQL数据库表上设置字符集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>
  • 我已经使用插件将液碱与Maven集成
  • 当我运行mvn clean install时,它会创建MySQL表,例如

创建表network ( network_id bigint(19( 无符号不为空, name VARCHAR(300( 不为空,active tinyint(1( 不为空默认值 "1",created_at时间戳不为空默认CURRENT_TIMESTAMP,
created_by varchar(100( 默认值为空,updated_at时间戳为空 默认值空,updated_by VARCHAR(100( 默认空,主键 ( network_id ( (引擎=InnoDB 默认字符集=拉丁语1;

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

问题

如何制作CHARSET=UTF-8

您可以在创建表定义后使用 modifySql 元素:

</createTable>
<modifySql dbms="mysql">
    <append value="ENGINE=INNODB CHARSET=UTF8 COLLATE utf8_unicode_ci"/>
</modifySql>
如果需要字符

集/整理的每列规范(因为您可能希望为列使用不同的字符集(,以下内容对我有用(只需将字符集和整理子句附加到columntype 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>

通常,字符集的配置是在创建数据库时完成的,您应该在 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?

相关内容

  • 没有找到相关文章

最新更新