क्या MySQL केस में टेबल के नाम संवेदनशील हैं?


173

क्या MySQL केस में टेबल के नाम संवेदनशील हैं?

मेरे विंडोज डेवलपमेंट मशीन पर मेरे पास मौजूद कोड मेरे टेबल्स को क्वेरी करने में सक्षम है जो सभी लोअरकेस में दिखाई देते हैं। जब मैं हमारे डेटासेंटर में टेस्ट सर्वर पर तैनात होता हूं तो टेबल के नाम अपरकेस अक्षर से शुरू होते हैं।

हमारे द्वारा उपयोग किए जाने वाले सर्वर उबंटू पर हैं।


जवाबों:


203

सामान्य रूप में:

डेटाबेस और टेबल के नाम विंडोज में संवेदनशील नहीं हैं, और यूनिक्स की अधिकांश किस्मों में संवेदनशील हैं।

MySQL में, डेटाबेस डेटा निर्देशिका के भीतर निर्देशिकाओं के अनुरूप होते हैं। डेटाबेस के भीतर प्रत्येक तालिका डेटाबेस निर्देशिका के भीतर कम से कम एक फ़ाइल से मेल खाती है। नतीजतन, अंतर्निहित ऑपरेटिंग सिस्टम की केस संवेदनशीलता डेटाबेस और टेबल नामों की केस संवेदनशीलता में एक भूमिका निभाती है।

कोई कॉन्फ़िगर कर सकता है कि सिस्टम चर lower_case_table_names( my.cnf कॉन्फ़िगरेशन फ़ाइल [mysqld] के तहत) का उपयोग करके डिस्क पर तालिकाओं के नाम कैसे संग्रहीत किए जाते हैं ।

अनुभाग पढ़ें: अधिक जानकारी के लिए 10.2.2 पहचानकर्ता केस संवेदनशीलता


40
यह पूरी तरह से मुझे जला दिया गया क्योंकि मेरा कोड मेरे स्थानीय खिड़कियों के वातावरण पर बहुत अच्छा काम कर रहा था, लेकिन जब लिनक्स पर उत्पादन में ले जाया गया तो अपवादों को फेंक दिया !! धन्यवाद!
portforwardpodcast

6
इस उत्तर के लिए एक चेतावनी है, जिसका दस्तावेज़ीकरण में उल्लेख नहीं किया गया है: InnoDB डेटाबेस और तालिकाओं के लिए फ़ाइल या निर्देशिका नामों का उपयोग नहीं करता है, और इसलिए इसकी वस्तुएं हमेशा केस असंवेदनशील होती हैं, यहां तक ​​कि केस सेंसिटिव सिस्टम पर चलने पर भी। उदाहरण के लिए यह प्रश्न गलत हो सकता है कि इसके कारण क्या हो सकता है: stackoverflow.com/questions/23182969/…
जूल्स

यह पूरी कहानी नहीं है। स्टीफन लम्बर का जवाब देखें क्योंकि यह विन्यास योग्य है
क्रिस वुड

1
डिफ़ॉल्ट रूप से अधिकांश मैक कंप्यूटर केस-असंवेदनशील फाइल सिस्टम का उपयोग करते हैं। आप अपने फाइल सिस्टम को केस-सेंसिटिव होने के लिए ऑप्ट-इन कर सकते हैं, हालांकि।
चाड

यह और फ़ाइल नाम केस संवेदनशीलता एक कारण है जिसने मुझे एक वेब डेवलपर के रूप में उबंटू में स्थानांतरित किया।
मुहम्मद बिन युसरत

99

डेटाबेस और टेबल के नाम विंडोज में संवेदनशील नहीं हैं, और यूनिक्स या लिनक्स की अधिकांश किस्मों में संवेदनशील हैं।

इस समस्या को हल करने के लिए, लोअरकेस____नाम 1 पर सेट करें

lower_case_table_names = 1

यह आपके सभी तालिकाओं को कम कर देगा, चाहे आप उन्हें कैसे भी लिखें


1
मैकओएस एक्स पर भी वे संवेदनशील नहीं हैं, भले ही अंतर्निहित यूनिक्स है। यह संभवतः क्यों मैक पर MySQL के भीतर स्वत: पूर्ण है, भले ही प्रश्न न हों, तालिका या फ़ील्ड नामों के लिए केस-संवेदी है।
डेविड

हाँ, लेकिन इस बयान को रखने के लिए? मुझे लगता है कि यह है: /etc/mysql/my.cnf नीचे [mysql] समूह। लेकिन यह पर्याप्त नहीं है, फिर भी कुछ और करने की ज़रूरत है (इसके अलावा mysql को फिर से शुरू करें ...
Alg_D

1
यह केवल नई तालिकाओं को प्रभावित करता है। इस सेटिंग को बदलने से पहले मौजूदा तालिकाओं का नाम बदलकर लोअरकेस रखा जाना चाहिए।
मार्टिन

19

MySQL में तालिका नाम फ़ाइल सिस्टम प्रविष्टियाँ हैं, इसलिए यदि अंतर्निहित फ़ाइल सिस्टम है तो वे असंवेदनशील हैं।


3
मुझे नहीं लगता कि यह हमेशा InnoDB तालिकाओं के लिए सच है।
साइमन ईस्ट

@SimonEast क्या आप एक कारण बताएंगे जो आप सोचते हैं?
आर्य

16

यह lower_case_table_namesसिस्टम चर पर निर्भर करता है :

show variables where Variable_name='lower_case_table_names'

इसके लिए तीन संभावित मान हैं:

  • 0- CREATE TABLEया CREATE DATABASEविवरण में निर्दिष्ट अक्षर । नाम तुलना मामले संवेदनशील हैं।
  • 1 - टेबल के नाम डिस्क पर लोअरकेस में रखे गए हैं और नाम की तुलना में मामला संवेदनशील नहीं है।
  • 2- लेटरकेस निर्दिष्ट CREATE TABLEया CREATE DATABASEस्टेटमेंट में, लेकिन MySQL उन्हें लुकअप पर लोअरकेस में कनवर्ट करता है। नाम की तुलना में मामला संवेदनशील नहीं है।

प्रलेखन


11
  1. पर फ़ाइल का पता लगाएँ /etc/mysql/my.cnf

  2. निम्नलिखित पंक्तियों को जोड़कर फ़ाइल संपादित करें:

    [mysqld]

    lower_case_table_names=1

  3. sudo /etc/init.d/mysql restart

  4. चलाने mysqladmin -u root -p variables | grep tableकि जाँच करने के लिए lower_case_table_namesहै 1अब

इसे काम करने के लिए आपको इन तालिकाओं को फिर से बनाना पड़ सकता है

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.