sql >> Databáze >  >> RDS >> Mysql

Neplatná kombinace porovnávání (utf8_unicode_ci,IMPLICIT) a (utf8_general_ci,IMPLICIT) pro operaci '='

Výchozí řazení pro parametry uložené procedury je utf8_general_ci a nemůžete kombinovat porovnávání, takže máte čtyři možnosti:

Možnost 1 :přidejte COLLATE do vaší vstupní proměnné:

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

Možnost 2 :přidejte COLLATE do WHERE klauzule:

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

Možnost 3 :přidejte jej do IN definice parametru (před 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

Možnost 4 :změňte samotné pole:

ALTER TABLE users CHARACTER SET utf8 COLLATE utf8_general_ci;

Pokud nepotřebujete třídit data v pořadí Unicode, navrhoval bych změnit všechny vaše tabulky tak, aby používaly utf8_general_ci řazení, protože nevyžaduje žádné změny kódu a mírně urychlí řazení.

AKTUALIZACE :utf8mb4/utf8mb4_unicode_ci je nyní preferovanou znakovou sadou/metodou řazení. utf8_general_ci se nedoporučuje, protože zlepšení výkonu je zanedbatelné. Viz https://stackoverflow.com/a/766996/1432614



  1. Migrace Google Cloud SQL pro MySQL na On-Prem Server

  2. Výchozí formát DATE společnosti Oracle

  3. Jak vytvořit VARRAY jako databázový objekt v databázi Oracle

  4. Jak vytvořit pivotní dotaz na serveru SQL bez agregační funkce