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;

<स्ट्राइक>जब तक आपको यूनिकोड क्रम में डेटा सॉर्ट करने की आवश्यकता नहीं है, मैं आपको 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. MySQL स्प्लिट कॉमा सेपरेटेड स्ट्रिंग इन टेम्प टेबल

  2. एसक्यूएल के साथ गतिशील MySQL प्रश्न तैयार कथन के रूप में सुरक्षित रूप से बच रहे हैं?

  3. MySQL सम्मिलित क्वेरी से नया रिकॉर्ड प्राथमिक कुंजी आईडी प्राप्त करें?

  4. mysql_fetch_array () पैरामीटर 1 को संसाधन समस्या होने की अपेक्षा करता है

  5. MySQL डेटाबेस की प्रत्येक तालिका में फ़ील्ड में टेक्स्ट खोजें