संग्रहीत कार्यविधि पैरामीटर के लिए डिफ़ॉल्ट संयोजन 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;
<स्ट्राइक>जब तक आपको यूनिकोड क्रम में डेटा सॉर्ट करने की आवश्यकता नहीं है, मैं आपको utf8_general_ci
का उपयोग करने के लिए अपनी सभी तालिकाओं को बदलने का सुझाव दूंगा। संयोजन, क्योंकि इसके लिए किसी कोड परिवर्तन की आवश्यकता नहीं है, और गति थोड़ी बढ़ जाएगी।
अपडेट करें :utf8mb4/utf8mb4_unicode_ci अब पसंदीदा वर्ण सेट/संयोजन विधि है। utf8_general_ci के खिलाफ सलाह दी जाती है, क्योंकि प्रदर्शन में सुधार नगण्य है। देखें https://stackoverflow.com/a/766996/1432614