You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JPABuddy生成MySQL Liquibase初始化脚本:nvarchar默认utf8mb3的问题

解决JPABuddy生成Liquibase脚本时nvarchar的utf8mb3警告问题

用JPABuddy给MySQL 8.0.33生成Liquibase初始化脚本时,生成的nvarchar类型默认绑定了已被弃用的utf8mb3字符集和utf8mb3_general_ci排序规则,执行脚本时会弹出MySQL警告:

0 row(s) affected, 1 warning(s): 3720 NATIONAL/NCHAR/NVARCHAR implies the character set UTF8MB3, which will be replaced by UTF8MB4 in a future release. Please consider using CHAR(x) CHARACTER SET UTF8MB4 in order to be unambiguous.

直接把脚本里的nvarchar改成varchar虽然能消警告,但会破坏Liquibase变更日志的灵活性,分享几个更合理的解决办法:

  • 改JPABuddy默认配置,直接生成utf8mb4的脚本
    打开JPABuddy的设置,找到数据库相关配置项,在MySQL的默认字符集里选utf8mb4,排序规则选utf8mb4_unicode_ci(或者官方推荐的其他规则)。这样后续生成的Liquibase脚本里,nvarchar类型会自动关联正确的字符集,不会再出警告。

  • 用Liquibase的modifySql适配MySQL,不改动原始脚本结构
    如果不想改JPABuddy的配置,在Liquibase的变更集里给nvarchar字段加字符集指定,用modifySql只针对MySQL生效:

    <column name="your_column" type="nvarchar(255)">
        <constraints nullable="false"/>
        <modifySql dbms="mysql">
            <replace replace="nvarchar(255)" with="nvarchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci"/>
        </modifySql>
    </column>
    

    这种方式保留了变更日志的跨数据库兼容性,不会破坏灵活性。

  • 全局配置Liquibase的MySQL字符集
    在Liquibase的配置文件(比如liquibase.properties或者Spring Boot的application.yml)里加全局参数,让所有nvarchar默认用utf8mb4:

    spring:
      liquibase:
        parameters:
          charset: utf8mb4
          collation: utf8mb4_unicode_ci
    

    或者properties格式:

    liquibase.database.mysql.defaultCharset=utf8mb4
    liquibase.database.mysql.defaultCollation=utf8mb4_unicode_ci
    

内容的提问来源于stack exchange,提问作者vunhatchuong

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 23:02:43