【问题标题】:Illegal mix of collations for operation 'UNION' Nodejs Mysql操作'UNION'Nodejs Mysql的排序规则的非法混合
【发布时间】:2021-07-30 10:20:39
【问题描述】:

我正在尝试获取用户使用此 sql 编写的所有帖子:

'SELECT * FROM users WHERE username=? UNION ALL SELECT * FROM posts WHERE writer_name=?'

我收到了这个错误:

"Illegal mix of collations for operation 'UNION'"

表格

CREATE TABLE `claudioBlog`.`users` ( 
  `id` INT UNSIGNED NOT NULL AUTO_INCREMENT , 
  `username` VARCHAR(100) NOT NULL , 
  `email` VARCHAR(100) NOT NULL , 
  `age` VARCHAR(100),
  `discription` VARCHAR (255),
  `ocupation` VARCHAR (100),
  `profile_image` VARCHAR (100)
  `password` VARCHAR(255) NOT NULL , 
  PRIMARY KEY (`id`), UNIQUE (`email`)
  ) ENGINE = InnoDB
  
 CREATE TABLE posts (
  id int(11) NOT NULL AUTO_INCREMENT,
  title VARCHAR(50)  NOT NULL,
  category VARCHAR(50)  NOT NULL,
  body VARCHAR(2000)  NOT NULL,
  writer_id VARCHAR(50)  NOT NULL,
  writer_name VARCHAR(50)  NOT NULL,
  post_img VARCHAR(100),
  created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (id)
 ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

我有什么需要注意的?

【问题讨论】:

标签: mysql sql node.js


【解决方案1】:

您需要join,而不是union。据推测,writer_id 是对users(id) 的外键引用

SELECT p.*
FROM users u JOIN
     posts p
     ON p.writer_id = u.id
WHERE u.username = ? ;

注意:如果write_id 确实引用了users(id),则将write_name 存储在posts 中是不合适的,除非——出于某种奇怪的原因——它可能因帖子而异,并且不是用户真实的名字。

【讨论】:

    猜你喜欢
    • 2016-12-08
    • 2013-12-25
    • 2011-12-06
    • 1970-01-01
    • 2012-08-28
    • 1970-01-01
    • 1970-01-01
    • 2014-05-20
    • 2014-12-03
    相关资源
    最近更新 更多