sql >> Database >  >> RDS >> Mysql

Illegale mix van sorteringen (utf8_unicode_ci,IMPLICIT) en (utf8_general_ci,IMPLICIT) voor bewerking '='

De standaardsortering voor parameters van opgeslagen procedures is utf8_general_ci en je kunt geen sorteringen combineren, dus je hebt vier opties:

Optie 1 :voeg COLLATE toe naar uw invoervariabele:

SET @rUsername = ‘aname’ COLLATE utf8_unicode_ci; -- COLLATE added
CALL updateProductUsers(@rUsername, @rProductID, @rPerm);

Optie 2 :voeg COLLATE toe naar de WHERE clausule:

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 COLLATE utf8_unicode_ci -- COLLATE added
        AND productUsers.productID = rProductID;
END

Optie 3 :voeg het toe aan de IN parameterdefinitie (pre-MySQL 5.7):

CREATE PROCEDURE updateProductUsers(
    IN rUsername VARCHAR(24) COLLATE utf8_unicode_ci, -- COLLATE added
    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

Optie 4 :verander het veld zelf:

ALTER TABLE users CHARACTER SET utf8 COLLATE utf8_general_ci;

Tenzij u gegevens in Unicode-volgorde moet sorteren, raad ik u aan al uw tabellen te wijzigen om utf8_general_ci te gebruiken sortering, omdat er geen codewijzigingen nodig zijn, en het sorteren iets zal versnellen.

UPDATE :utf8mb4/utf8mb4_unicode_ci is nu de geprefereerde tekenset/sorteermethode. utf8_general_ci wordt afgeraden, omdat de prestatieverbetering verwaarloosbaar is. Zie https://stackoverflow.com/a/766996/1432614



  1. Wat is het verschil tussen schema en database?

  2. Ik kan de SQL Server-browser niet starten

  3. Keuze opslagmotor:Aria

  4. Uren toevoegen aan een tijdwaarde in PostgreSQL