Error en MySql: mezcla ilegal de intercalaciones (utf8_unicode_ci, implícita) y (utf8_general_ci, implícita) para la operación '='mezcla ilegal de intercalaciones (utf8_unicode_ci, implícita) y (utf8_general_ci, implícita) para el funcionamiento '='
He pasado por varias otras publicaciones y no he podido resolver este problema. La parte afectada es algo similar a esto:
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;
El procedimiento almacenado que estoy usando es la siguiente:
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
estaba probando con php, pero el mismo error se da con SQLyog. También probé recreando toda la base de datos, pero para nada.
Cualquier ayuda será muy apreciada.
Su primera opción era la respuesta que estaba buscando =). Gracias. – Manatax
También es posible agregar 'COLLATE utf8_unicode_ci' a las constantes de cadena: ' SET @EMAIL = '[email protected]' COLLATE utf8_unicode_ci; '. Es especialmente útil si ejecuta un script desde una consola, donde la codificación predeterminada de la consola se aplica a la intercalación de las constantes de cadena. – gaborsch
O suelte la base de datos y cree una nueva con utf8_general_ci; colación. – Oleksii