簡體   English   中英

用於操作“UNION”Nodejs Mysql 的排序規則的非法混合

[英]Illegal mix of collations for operation 'UNION' Nodejs Mysql

我正在嘗試獲取用戶使用此 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;

我有什么要改變的?

你想要一個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是不合適的,除非——出於某種奇怪的原因——它可能因帖子而異,而不是用戶的真實姓名。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM