- 推荐先阅读以下文章,了解使用 Prisma 连接 OceanBase 的前置要求。
问题背景
- 在 oceanbase-ce 4.2.1.9 版本下,执行 Prisma 的迁移命令时,出现
不支持 utf8mb4_unicode_ci 字符序
的报错: feat: Add prisma sample for javascript · oceanbase/ob-samples@253b957 · GitHub
# Prisma 迁移命令
npx prisma migrate dev --name init
问题原因
内核原因
- OB 4.2.1 社区版不支持 utf8mb4_unicode_ci 字符序: https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000000580679,企业版是支持的。
-
OB 社区版从 4.2.2 才开始支持 utf8mb4_unicode_ci 字符序:
Prisma 原因
- Prisma 迁移表结构时写死了字符序
utf8mb4_unicode_ci
Issues · prisma/prisma · GitHub 2 年多前就已经反馈了该问题,但 Prisma 官方至今仍然没有解决。
-
其他 ORM 均支持自定义字符集和字符序:
const sequelize = new Sequelize('database', 'username', 'password', {
dialect: 'mysql',
dialectOptions: {
charset: 'utf8_general_ci'
},
});
- TypeORM: https://sparklytical.gitbook.io/typeorm/connection/connection-options#mysql-mariadb-connection-options
- Drizzle: https://orm.drizzle.team/docs/get-started/mysql-new
解决方案
方案 1
- 使用 oceanbase-ce 4.2.2 及以上版本: 在 CI 场景下可以通过 https://github.com/oceanbase/setup-oceanbase-ce 进行设置。
- PR: feat: Add prisma sample for javascript by dengfuping · Pull Request #73 · oceanbase/ob-samples · GitHub
- CI: feat: Add prisma sample for javascript · oceanbase/ob-samples@2e16005 · GitHub
方案 2
- 提 PR 帮 Prisma 实现自定义字符集和字符序的功能。