2010-08-03 18 views
24

में बदलने के लिए मेरे पास MySQL डेटाबेस में एक तालिका है, जिसका उपयोग प्रमाणीकरण के लिए किया जाता है। और अब, मुझे प्रमाणीकरण केस संवेदनशील बनाना है। चारों ओर घूमते हुए, मैंने महसूस किया है कि माईस्क्ल कॉलम खोज परिचालन के लिए केस असंवेदनशील (ओरेकल के विपरीत) हैं और "बाइनरी" यानी निर्दिष्ट करके तालिका बनाने के दौरान डिफ़ॉल्ट व्यवहार बदला जा सकता है।MySQL तालिका कॉलम को केस संवेदनशील

CREATE TABLE USERS 
(
    USER_ID SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT, 
    USER_NAME VARCHAR(50) BINARY NOT NULL 
) 

कोई मुझे बता सकते हैं कि कैसे "बाइनरी" एक डीबी की मौजूदा स्तंभ में जोड़ने के लिए MySQL में तालिका को बदलने के लिए?

धन्यवाद!

+0

आपको इसे केस संवेदनशील बनाने के लिए बाइनरी बनाने की आवश्यकता नहीं है। यदि यह एक वर्चर है, तो बस उपरोक्त के आधार पर collation = latin1_general_cs – Chiwda

उत्तर

27
ALTER TABLE USERS CHANGE USER_NAME USER_NAME VARCHAR(50) BINARY NOT NULL; 
+2

कॉलम नाम को दो बार सूचीबद्ध करने की आवश्यकता नहीं है यदि इसे बदला नहीं जा रहा है;) – defines

+14

MySQL दस्तावेज़ों को उद्धृत करने के लिए http://dev.mysql.com/doc/refman/5.1/en/alter-table.html, " यदि आप कॉलम के प्रकार को बदलना चाहते हैं लेकिन नाम नहीं चाहते हैं, तो चेंज सिंटैक्स को अभी भी पुराने और नए कॉलम नाम की आवश्यकता है, भले ही वे समान हों। " – deinst

+0

यदि किसी ने दस्तावेज़ को याद किया है, तो आप कॉलम नाम बदल नहीं रहे हैं, तो आप 'परिवर्तन' के बजाय 'मोडिफ़ी 'का उपयोग कर सकते हैं।उस स्थिति में आपको केवल कॉलम नाम एक बार प्रदान करना होगा। – wsams

-1

के बजाय अपनी मेज, आप अब भी जब के सत्यापन अपनी मेज पर केस संवेदी प्रश्न करने होंगे, इस प्रकार बाइनरी विकल्प का उपयोग कर सकते हैं फेरबदल:

SELECT BINARY * FROM USERS where USER_ID = 2 AND USER_NAME = 'someone' LIMIT 1; 

इस मदद करता है?

+0

का उपयोग करें, SomeOne का उपयोगकर्ता नाम गलत लौटाएगा। – SimonDowdles

+4

यह प्रत्येक प्रश्न के लिए एक महत्वपूर्ण ओवरहेड जोड़ता है। यदि डेटा हमेशा बाइनरी लौटाया जाना चाहिए तो इसे हर एक एक्सेस पर क्यों परिवर्तित करें? यही वह है जिसे हम "क्लज" कहते हैं। – defines

+0

शायद मुझे समझ में नहीं आ रहा है, क्या निम्न कथन का अर्थ भविष्य में एक मामूली जांच का मतलब होगा? वैकल्पिक तालिका उपयोगकर्ता परिवर्तन USER_NAME USER_NAME VARCHAR (50) अंतिम नहीं है; जहां तक ​​मुझे लगता है कि प्रत्येक लॉगिन प्रमाणीकरण केस संवेदनशील होने की आवश्यकता है। – SimonDowdles

4

आप इस तरह कुछ करने के लिए सक्षम होना चाहिए:

संपादित करें: पढ़ने में भूलना आप क्या करने का इरादा क्या:

ALTER TABLE USERS MODIFY 
    USER_NAME VARCHAR(50) 
     CHARACTER SET latin1 
     COLLATE latin1_bin; 
+0

निम्नलिखित मेरे लिए काम किया: वैकल्पिक तालिका उपयोगकर्ता खाता परिवर्तन पासवर्ड पासवर्ड वर्कर (50) न्यूल COLLATE utf8_bin; –

6

कृपया देखें http://dev.mysql.com/doc/refman/5.0/en/charset-conversion.html

उदाहरण:

ALTER TABLE some_table MODIFY some_column BLOB; 
ALTER TABLE some_table MODIFY some_column VARCHAR(50) BINARY; 

पहली पंक्ति एक बाइनरी डेटा प्रकार (चरित्र हानि को कम करने का प्रयास) में परिवर्तित हो जाती है और दूसरा VARCHAR पर BINARY संयोजन के साथ परिवर्तित होता है।

यह वास्तव में बस BINARY क्रमवार से बाइनरी प्रकारों में से एक (BLOB, BINARY, या VARBINARY) के रूप में स्टोर करने के लिए बेहतर हो सकता है बल्कि। मैं सुझाव दूंगा कि आप थोड़ा सा तुलना करें, आपका माइलेज आपके वास्तविक डेटा और आपके द्वारा चलाने के लिए आवश्यक प्रश्नों के आधार पर भिन्न हो सकता है।

संबंधित मुद्दे