Directus 10设置DB_CHARSET=utf8mb4后外键约束不兼容报错求助
解决Directus 10中外键约束不兼容的问题
这个报错的核心是外键关联的两个字段属性不匹配——哪怕数据库全局字符集是utf8mb4,只要字段层面的类型、长度、排序规则有差异,就会触发这个错误。以下是具体排查和解决步骤:
核对字段属性一致性
直接查询两张表的字段详情,确认test77777.test和directus_files.id的类型、长度、排序规则、可空性完全一致:-- 查看directus_files.id的属性 DESCRIBE directus_files; -- 查看test77777.test的属性 DESCRIBE test77777;Directus默认的
directus_files.id是CHAR(36)类型,排序规则通常为utf8mb4_bin(UUID默认区分大小写),如果你的test字段是VARCHAR或者用了utf8mb4_general_ci排序规则,就会出现不兼容。修正字段属性
如果是排序规则不匹配,执行SQL修改字段:ALTER TABLE `test77777` MODIFY COLUMN `test` CHAR(36) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL;确保类型、长度、排序规则和
directus_files.id完全对应后,再回到Directus重新保存字段的关联设置。补全.env配置
只设置DB_CHARSET可能不够,建议在.env中明确指定排序规则,和数据库全局配置保持一致:DB_CHARSET="utf8mb4" DB_COLLATION="utf8mb4_general_ci"修改后重启Directus服务,避免配置不生效。
注意Directus字段类型选择
在Directus中创建关联字段时,直接选择UUID类型而非手动选字符串类型,系统会自动匹配目标表id的属性,减少手动配置出错的概率。
内容的提问来源于stack exchange,提问作者Stev24
相关产品推荐
相关产品推荐

