मैं वर्तमान में निचले मामले में अपने SQL सर्वर डेटाबेस में स्ट्रिंग के सामान्यीकृत संस्करणों को संग्रहीत कर रहा हूं। उदाहरण के लिए, मेरे उपयोगकर्ता तालिका में, मेरे पास UserName और LoweredUserName फ़ील्ड है। संदर्भ के आधार पर, मैं या तो Low -UererName फ़ील्ड को भरने के लिए उपयोगकर्ता नाम के निचले केस संस्करण को उत्पन्न करने के लिए टी-एसक्यूएल के लोअर() फ़ंक्शन या सी # की स्ट्रिंग.ToLower() विधि का उपयोग करता हूं। Microsoft's guidelines और Visual Studio's code analysis rule CA1308 के अनुसार, मुझे ToLower() के बजाय C# की स्ट्रिंग.ToUpperInvariant() का उपयोग करना चाहिए। माइक्रोसॉफ्ट के मुताबिक, यह एक प्रदर्शन और वैश्वीकरण मुद्दा दोनों है: ऊपरी मामले में परिवर्तित करना सुरक्षित है, जबकि कम मामले में कनवर्ट करने से सूचना का नुकसान हो सकता है (उदाहरण के लिए, the Turkish 'I' problem)।स्ट्रिंग के साथ स्ट्रिंग्स का सामान्यीकरण। ToUpperInvariant()
अगर मैं स्ट्रिंग सामान्य के लिए ToUpperInvariant उपयोग करने के लिए ले जाते हैं, मैं भी मेरी डेटाबेस स्कीमा को बदलने के लिए, के बाद से मेरी स्कीमा Microsoft's ASP.NET Membership फ्रेमवर्क (this related question देखें) है, जो तार को लोअर केस में को सामान्य पर आधारित है होगा।
क्या माइक्रोसॉफ्ट ने सी # में ऊपरी केस सामान्यीकरण का उपयोग करने के लिए हमें बताकर खुद का विरोधाभास नहीं किया है, जबकि सदस्यता तालिका में प्रक्रिया है और प्रक्रियाएं कम केस सामान्यीकरण का उपयोग कर रही हैं? क्या मुझे सबकुछ ऊपरी केस सामान्यीकरण में बदलना चाहिए, या बस कम केस सामान्यीकरण का उपयोग करना जारी रखना चाहिए?
यह केवल एक प्रदर्शन मुद्दा नहीं है, यह एक वैश्वीकरण मुद्दा भी है। माइक्रोसॉफ्ट के मुताबिक, ऊपरी मामले में कनवर्ट करना सुरक्षित है, जबकि कम मामले में कनवर्ट करने से सूचना का नुकसान हो सकता है (उदाहरण के लिए, तुर्की 'आई' समस्या में)। –
@ केविन, तुर्की/एजेरी डॉटलेस I समस्या एक विशेष मामला बनी हुई है, जो भी दृष्टिकोण का उपयोग किया जाता है (वे मुझे अपरकेस I और I से) तक), हालांकि कम करने के लिए एसएस के लिए अस्पष्ट है (यह एसएस या ß होना चाहिए) लेकिन यह भी अपूर्ण है (कुछ ऑर्थोग्राफिक्स अभी भी एसजेड के लिए अपरकेस ß)। हालांकि यह अभी भी बेहतर है। बेहतर है कि यूनिकोड केस-फोल्डिंग नियमों का उपयोग I और ı के लिए तुर्किक स्विच के साथ करना है, लेकिन यह अभी भी सही नहीं होगा, जो केवल प्रति लोकेल हो सकता है :( –