错误味精的非法组合:归类(utf8_unicode_ci,隐含的)的操作 '='归类(utf8_unicode_ci,IMPLICIT)和(utf8_general_ci,隐含的)上进行操作的MySQL '='
非法混合物和(utf8_general_ci,隐含的)我已经经历了其他几个职位,无法解决这个问题。 受影响的部分是与此类似:
CREATE TABLE users (
userID INT UNSIGNED NOT NULL AUTO_INCREMENT,
firstName VARCHAR(24) NOT NULL,
lastName VARCHAR(24) NOT NULL,
username VARCHAR(24) NOT NULL,
password VARCHAR(40) NOT NULL,
PRIMARY KEY (userid)
) ENGINE = INNODB CHARACTER SET utf8 COLLATE utf8_unicode_ci;
CREATE TABLE products (
productID INT UNSIGNED NOT NULL AUTO_INCREMENT,
title VARCHAR(104) NOT NULL,
picturePath VARCHAR(104) NULL,
pictureThumb VARCHAR(104) NULL,
creationDate DATE NOT NULL,
closeDate DATE NULL,
deleteDate DATE NULL,
varPath VARCHAR(104) NULL,
isPublic TINYINT(1) UNSIGNED NOT NULL DEFAULT '1',
PRIMARY KEY (productID)
) ENGINE = INNODB CHARACTER SET utf8 COLLATE utf8_unicode_ci;
CREATE TABLE productUsers (
productID INT UNSIGNED NOT NULL,
userID INT UNSIGNED NOT NULL,
permission VARCHAR(16) NOT NULL,
PRIMARY KEY (productID,userID),
FOREIGN KEY (productID) REFERENCES products (productID) ON DELETE RESTRICT ON UPDATE NO ACTION,
FOREIGN KEY (userID) REFERENCES users (userID) ON DELETE RESTRICT ON UPDATE NO ACTION
) ENGINE = INNODB CHARACTER SET utf8 COLLATE utf8_unicode_ci;
我使用的存储过程是这样的:
CREATE PROCEDURE updateProductUsers (IN rUsername VARCHAR(24),IN rProductID INT UNSIGNED,IN rPerm VARCHAR(16))
BEGIN
UPDATE productUsers
INNER JOIN users
ON productUsers.userID = users.userID
SET productUsers.permission = rPerm
WHERE users.username = rUsername
AND productUsers.productID = rProductID;
END
我是用PHP进行测试,但与SQLyog的给出了同样的错误。 我也测试过重新创建整个数据库,但没有成功。
任何帮助将不胜感激。
你的第一选择是我一直在寻找=答案)。谢谢。 – Manatax 2012-08-02 02:49:00
另外,也可以添加'COLLATE utf8_unicode_ci'到字符串常量: 'SET @EMAIL = '[email protected]' COLLATE utf8_unicode_ci;'。如果您正在从控制台运行脚本,其中控制台默认编码适用于您的字符串常量的归类,这一点尤其有用。 – gaborsch 2016-05-05 10:35:22
或者放下数据库并用utf8_general_ci创建新的;排序规则。 – Oleksii 2017-04-01 22:05:17