Mysql
 sql >> база данни >  >> RDS >> Mysql

Незаконен микс от съпоставяне (utf8_unicode_ci,IMPLICIT) и (utf8_general_ci,IMPLICIT) за операция '='

Съпоставянето по подразбиране за параметрите на съхранената процедура е utf8_general_ci и не можете да смесвате композиции, така че имате четири опции:

Опция 1 :добавете COLLATE към вашата входна променлива:

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

Вариант 2 :добавете COLLATE до WHERE клауза:

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

Вариант 3 :добавете го към IN дефиниране на параметър (преди 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

Вариант 4 :променя самото поле:

ALTER TABLE users CHARACTER SET utf8 COLLATE utf8_general_ci;

Освен ако не трябва да сортирате данните в Unicode ред, предлагам да промените всичките си таблици, за да използвате utf8_general_ci съпоставяне, тъй като не изисква промени в кода и леко ще ускори сортирането.

АКТУАЛИЗИРАНЕ :utf8mb4/utf8mb4_unicode_ci вече е предпочитаният метод за набор от знаци/съпоставяне. utf8_general_ci не се препоръчва, тъй като подобрението на производителността е незначително. Вижте 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. Активирайте Entity Framework 6 за MySql (C#) в WinForms на Microsoft Visual Studio 2013

  2. Как мога да използвам MySql потребителски дефинирана променлива в .NET MySqlCommand?

  3. Намерете броя на колоните в таблица

  4. Как правилно да напишете UTF-8 низове в MySQL чрез JDBC интерфейс

  5. Как да репликирате MySQL база данни на друг сървър