टी-एसक्यूएल बयानों में उपसर्ग एन का क्या अर्थ है और मुझे इसका उपयोग कब करना चाहिए?


352

मैंने कुछ सम्मिलित T-SQL प्रश्नों में उपसर्ग N देखा है। कई लोगों ने Nएक तालिका में मूल्य डालने से पहले उपयोग किया है ।

मैंने खोज की, लेकिन मैं यह समझ नहीं पा रहा था Nकि तालिका में किसी भी तार को सम्मिलित करने से पहले क्या शामिल है ।

INSERT INTO Personnel.Employees
VALUES(N'29730', N'Philippe', N'Horsford', 20.05, 1),

यह 'एन' उपसर्ग किस उद्देश्य से कार्य करता है और इसका उपयोग कब किया जाना चाहिए?

जवाबों:


415

यह स्ट्रिंग को nvarcharडेटा प्रकार के बजाय घोषित कर रहा हैvarchar

आपने ट्रां-एसक्यूएल कोड देखा होगा जो एन उपसर्ग का उपयोग करते हुए स्ट्रिंग को पास करता है। यह दर्शाता है कि बाद में स्ट्रिंग यूनिकोड में है (एन वास्तव में राष्ट्रीय भाषा चरित्र सेट के लिए खड़ा है)। जिसका अर्थ है कि आप एक NCHAR, NVARCHAR या NTEXT मान पारित कर रहे हैं, जैसा कि CHAR, VARCHAR या पाठ के विपरीत है।

Microsoft से उद्धृत करने के लिए :

उपसर्ग यूनिकोड वर्ण स्ट्रिंग स्थिरांक के साथ अक्षर एन। एन उपसर्ग के बिना, स्ट्रिंग डेटाबेस के डिफ़ॉल्ट कोड पृष्ठ में बदल जाती है। यह डिफ़ॉल्ट कोड पृष्ठ कुछ वर्णों को नहीं पहचान सकता है


यदि आप इन दो डेटा प्रकारों के बीच अंतर जानना चाहते हैं, तो इस SO पोस्ट को देखें:

वरचर और नवरचचर में क्या अंतर है?


1
@ इसका मतलब है कि मैं शटडाउन का उपयोग Nकेवल तभी करता हूं जब मैं डेटासिप का उपयोग कर रहा हूं CHAR, VARCHAR or TEXT?? क्योंकि `NCHAR, NVARCHAR या NTEXT` स्वाभाविक रूप से UNICODE स्टोर हैं, मुझे इसे अलग से जोड़ने की आवश्यकता नहीं है .... क्या यह सच है?
प्रीतेश

@Pritesh - केवल यदि आप एक डिफ़ॉल्ट कोड पृष्ठ का उपयोग कर रहे हैं, जो उन यूनिकोड वर्णों को ऊपर के बोल्ड पाठ में नहीं पहचान सकता है।
टॉड

5
के लिए लिंक @Curt databases aspfaq comअत्यंत संदिग्ध वेबसाइटों के लिए रीडायरेक्ट ( fkref com, za1 zeroredirect1 com, i0z13 trackvoluum com), अश्लील साहित्य, दुर्भावनापूर्ण साइटों और स्पैम यूआरएल के रूप में हमारे कॉर्पोरेट फ़ायरवॉल द्वारा चिह्नित किया गया है जो। मैंने aspfaq.com के मालिक से संपर्क किया है और लिंक को हटाने के लिए उत्तर को संपादित किया है।
jaume

21

मैं आपको एक कष्टप्रद बात बताता हूं जो N'उपसर्ग के साथ हुआ था - मैं इसे दो दिनों तक ठीक करने में सक्षम नहीं था।

मेरा डेटाबेस टकराव SQL_Latin1_General_CP1_CI_AS है

इसमें एक कॉलम है जिसमें MyCol1 नामक कॉलम है । यह एक नवरचार है

यह क्वेरी Exact Value यानी Exists से मेल करने में विफल रहती है

SELECT TOP 1 * FROM myTable1 WHERE  MyCol1 = 'ESKİ'  

// 0 result

उपसर्ग N '' का उपयोग करके इसे ठीक करता है

SELECT TOP 1 * FROM myTable1 WHERE  MyCol1 = N'ESKİ'  

// 1 result - found!!!!

क्यों? क्योंकि latin1_general के पास बड़ा डॉटेड नहीं है, इसलिए यह असफल है कि मुझे लगता है।


8

1. प्रदर्शन:

मान लें कि आपका क्लॉज इस तरह है:

WHERE NAME='JON'

यदि NAME स्तंभ nvarchar या nchar के अलावा किसी अन्य प्रकार का है, तो आपको N उपसर्ग निर्दिष्ट नहीं करना चाहिए। हालाँकि, यदि NAME स्तंभ प्रकार के nvarchar या nchar का है, तो यदि आप N उपसर्ग को निर्दिष्ट नहीं करते हैं, तो 'JON' को गैर-यूनिकोड माना जाता है। इसका अर्थ है कि NAME स्तंभ और स्ट्रिंग 'JON' के डेटा प्रकार अलग-अलग हैं और इसलिए SQL सर्वर एक ऑपरेंड के प्रकार को दूसरे में रूपांतरित करता है। यदि SQL सर्वर शाब्दिक प्रकार को स्तंभ के प्रकार में परिवर्तित करता है, तो कोई समस्या नहीं है, लेकिन यदि यह दूसरा तरीका करता है, तो प्रदर्शन को चोट लगेगी क्योंकि स्तंभ का सूचकांक (यदि उपलब्ध हो) अभ्यस्त नहीं होगा।

2. चरित्र सेट:

यदि स्तंभ प्रकार nvarchar या nchar का है, तो हमेशा WHIFT मापदंड / UPDATE / INSERT खंड में वर्ण स्ट्रिंग निर्दिष्ट करते समय उपसर्ग N का उपयोग करें। यदि आप ऐसा नहीं करते हैं और आपके स्ट्रिंग में से एक वर्ण यूनिकोड है (जैसे अंतर्राष्ट्रीय वर्ण - उदाहरण - ā) तो यह विफल हो जाएगा या डेटा भ्रष्टाचार से पीड़ित होगा।


4

मान के लिए nvarchar प्रकार है कि केवल हम N '' का उपयोग कर रहे हैं

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