Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Niedozwolona mieszanka zestawień (utf8_unicode_ci,IMPLICIT) i (utf8_general_ci,IMPLICIT) dla operacji '='

Domyślne sortowanie parametrów procedury składowanej to utf8_general_ci i nie możesz mieszać zestawień, więc masz cztery opcje:

Opcja 1 :dodaj COLLATE do zmiennej wejściowej:

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

Opcja 2 :dodaj COLLATE do WHERE klauzula:

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

Opcja 3 :dodaj go do IN definicja parametru (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

Opcja 4 :zmień samo pole:

ALTER TABLE users CHARACTER SET utf8 COLLATE utf8_general_ci;

O ile nie musisz sortować danych w kolejności Unicode, sugerowałbym zmianę wszystkich tabel tak, aby używały utf8_general_ci sortowanie, ponieważ nie wymaga zmian w kodzie i nieco przyspieszy sortowanie.

AKTUALIZUJ :utf8mb4/utf8mb4_unicode_ci jest teraz preferowanym zestawem znaków/metodą sortowania. Odradza się stosowanie utf8_general_ci, ponieważ poprawa wydajności jest znikoma. Zobacz https://stackoverflow.com/a/766996/1432614



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. 2 sposoby konwersji liczby na ósemkową w MySQL

  2. Czy możesz dodać oświadczenie if w ORDER BY?

  3. Usuń zapytanie nie działa w mysql

  4. Wyszukaj tekst w polach w każdej tabeli bazy danych MySQL

  5. MySQL Data - Najlepszy sposób na zaimplementowanie stronicowania?