【问题标题】:Illegal mix of collations in sequelizesequelize 中的排序规则的非法混合
【发布时间】:2021-10-29 11:35:23
【问题描述】:

我最近将 mysql 更新到 8.0 版,但遇到错误。

我有几个表之间的 UNION 查询。当我直接在 CLI 中运行它时,一切正常,但我的节点应用程序无法使用 sequelize 运行它。这是我得到的错误

SequelizeDatabaseError: Illegal mix of collations for operation 'UNION'

sequelize 中有什么设置可以解决这个问题吗?

【问题讨论】:

  • 将有问题的列转换为正确的排序规则,或者更改表/列,为什么你有不同的排序规则?
  • @nbk 我不知道为什么会出现错误。在 CLI 中一切正常。如何转换它们?
  • 用创建表和查询向我展示你的表
  • 如何连接数据库?应在此处设置字符集和排序规则。联合中涉及的 text/char 列的字符集和排序规则是什么?
  • @RickJames 感谢您的 cmets。联合中的问题在于 SQL 函数的输出。我改变了它们,它起作用了。

标签: mysql node.js encoding sequelize.js collation


【解决方案1】:

这是您将文本转换为另一个字符集和排序规则的方式

SELECT CONVERT('test' USING utf8mb4) COLLATE utf8mb4_bin;
SELECT CONVERT('test', CHAR CHARACTER SET utf8mb4) COLLATE utf8mb4_bin;
SELECT CAST('test' AS CHAR CHARACTER SET utf8mb4) COLLATE utf8mb4_bin;

所以你会做这样的事情

CREATE TABLE t1
(
    c1 CHAR(10)
) DEFAULT CHARACTER SET latin1 COLLATE latin1_danish_ci
CREATE TABLE t2
(
    c1 CHAR(10) 
) DEFAULT CHARACTER SET latin1 COLLATE latin1_german1_ci
SELECT c1 FROm t1
UNION
SELECT c1 FROm t2
操作“UNION”的排序规则的非法混合
SELECT CONVERT(c1, CHAR CHARACTER SET latin1) COLLATE latin1_german1_ci FROm t1
UNION
SELECT c1 FROm t2
| CONVERT(c1, CHAR CHARACTER SET latin1) 整理 latin1_german1_ci | | :------------------------------------------------ -------------- |

db小提琴here

【讨论】:

  • 请倾向于 8.0 默认的 utf8mb4 并远离 latin1。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-08-28
  • 2012-05-23
  • 2011-01-20
  • 2016-12-08
  • 2010-11-17
  • 2010-11-03
  • 2012-12-13
相关资源
最近更新 更多