java - Liquibase:未设置 MEDIUMTEXT 字符集

标签 java mysql liquibase amazon-aurora

我为 mysql aurora 数据库设置了 liquibase 更改:

<changeSet author="xxxxxx" id="1553175489296-3">
    <createTable tableName="event">
        <column name="id" type="VARCHAR(64)">
            <constraints primaryKey="true"/>
        </column>
        <column name="created" type="datetime">
            <constraints nullable="false"/>
        </column>
        <column name="created_by" type="VARCHAR(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci"/>
        <column name="description" type="MEDIUMTEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci"/>
        <column name="external_service_config" type="MEDIUMTEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci"/>
        <column name="language" type="VARCHAR(3) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci"/>
    </createTable>
</changeSet>

VARCHAR(*) 字段类型编码设置正确,但 MEDIUMTEXT 仍然是默认数据库编码。

我做错了什么吗?

PS:我不能去

<modifySql dbms="mysql">
            <append value="ENGINE=INNODB CHARSET=utf8mb4 COLLATE utf8mb4_unicode_ci"/>
</modifySql>

因为有人为整个表设置了编码,但我无法这样做,因为我的 key 长度超过 787 字节。所以列特定编码对我来说是唯一的方法。

最佳答案

事实证明这非常有效。您必须将其放在 </createTable> 之后如果有的话标记 MEDIUMTEXT该表中的字段。

<modifySql dbms="mysql">
            <replace replace="MEDIUMTEXT"
                     with="MEDIUMTEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci"/>
</modifySql>

关于java - Liquibase:未设置 MEDIUMTEXT 字符集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56099543/

相关文章:

java - 使用 Apache Commons 文件上传解析 multipart/form-data

mysql - 突出显示表 html 中的一行,该行的值超过平均值

java - liquibase 变更日志文件未从默认值更新

java - Spring 启动 : How to setup test data with liquibase in unit test

Java ArrayList,最终条目作为类属性

java - 将 ZoneId 应用于 Java 中的 Date 对象

java - manifest.srcFile导致在IntelliJ导入中未设置contentRoot

MySQL JOIN 和 WHERE - 我的查询出了什么问题

php - 使用 CakePHP,保存额外字段(id、值、数量)HABTM 表

java - Elasticsearch 的 Liquibase 或 Flyway 数据库迁移替代方案