Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Kết hợp bất hợp pháp các đối chiếu (utf8_unicode_ci, IMPLICIT) và (utf8_general_ci, IMPLICIT) cho hoạt động '='

Đối chiếu mặc định cho các tham số thủ tục được lưu trữ là utf8_general_ci và bạn không thể kết hợp các ảnh ghép, vì vậy bạn có bốn tùy chọn:

Tùy chọn 1 :thêm COLLATE vào biến đầu vào của bạn:

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

Tùy chọn 2 :thêm COLLATE đến WHERE mệnh đề:

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

Tùy chọn 3 :thêm nó vào IN định nghĩa tham số (trước 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

Tùy chọn 4 :thay đổi chính trường:

ALTER TABLE users CHARACTER SET utf8 COLLATE utf8_general_ci;

Trừ khi bạn cần sắp xếp dữ liệu theo thứ tự Unicode, tôi khuyên bạn nên thay đổi tất cả các bảng của mình để sử dụng utf8_general_ci đối chiếu, vì nó không yêu cầu thay đổi mã và sẽ tăng tốc độ sắp xếp một chút.

CẬP NHẬT :utf8mb4 / utf8mb4_unicode_ci hiện là phương thức đối chiếu / đặt ký tự được ưu tiên. utf8_general_ci được khuyên không nên vì việc cải thiện hiệu suất là không đáng kể. Xem 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. Plugin xác thực 'caching_sha2_password' không được hỗ trợ

  2. SQL:Lặp lại một hàng kết quả nhiều lần và đánh số các hàng

  3. Làm thế nào để chuyển đổi một chuỗi thành ngày tháng trong MySQL?

  4. Sử dụng bộ nhớ tối đa MySQL

  5. Cách cắt ngắn bảng trong MySQL