Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Campuran ilegal dari susunan (utf8_unicode_ci,IMPLICIT) dan (utf8_general_ci,IMPLICIT) untuk operasi '='

Susunan default untuk parameter prosedur tersimpan adalah utf8_general_ci dan Anda tidak dapat mencampur susunan, jadi Anda memiliki empat opsi:

Opsi 1 :tambahkan COLLATE ke variabel input Anda:

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

Opsi 2 :tambahkan COLLATE ke WHERE klausa:

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

Opsi 3 :tambahkan ke IN definisi parameter (pra-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

Opsi 4 :mengubah bidang itu sendiri:

ALTER TABLE users CHARACTER SET utf8 COLLATE utf8_general_ci;

Kecuali Anda perlu mengurutkan data dalam urutan Unicode, saya sarankan mengubah semua tabel Anda untuk menggunakan utf8_general_ci collation, karena tidak memerlukan perubahan kode, dan akan sedikit lebih cepat.

PERBARUI :utf8mb4/utf8mb4_unicode_ci sekarang menjadi metode kumpulan/pengumpulan karakter yang disukai. utf8_general_ci tidak disarankan, karena peningkatan kinerja dapat diabaikan. Lihat 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. Perubahan zona waktu MySQL?

  2. 4 Cara Mendaftar Semua Tampilan di MySQL

  3. Bagaimana cara memprogram pemicu MySQL untuk memasukkan baris ke tabel lain?

  4. Buat Diagram Basis Data Secara Otomatis MySQL

  5. Referensi:Apa contoh kode yang sempurna menggunakan ekstensi MySQL?