2010-11-01 30 views
8

मेरा मानना ​​है कि इस प्रश्न का उत्तर "नहीं" है, लेकिन मुझे समुदाय की राय में रूचि है। एक वर्चर या nvarchar मूल्य स्वचालित रूप से पिछली सफेद जगह को ट्रिम करना चाहिए, इसलिए मुझे विश्वास नहीं है कि मुझे कभी भी इस तरह के मूल्य पर RTRIM() को कॉल करना होगा। क्या किसी विशेषज्ञ के पास ऐसा कोई कारण है जिसके लिए मुझे आवश्यकता होगी?क्या मुझे कभी भी वर्चर या nvarchar मूल्य पर RTRIM() को कॉल करने की आवश्यकता है?

+0

मुझे कभी नहीं करना पड़ा। –

उत्तर

11

तो ANSI_PADDING पर तो पीछे चल रही है रिक्त स्थान भी varchar/nvarchar डेटा प्रकार के साथ संग्रहीत किया जाएगा, ताकि हाँ:

भागो इस परीक्षण मैं क्या मतलब है देखने के लिए।

4

आप एक सरल चयन में मानों बाहर निकलने के लिए rtrim करने की जरूरत नहीं हो सकती है (मामले में टैग यह स्पष्ट है, मैं Microsoft SQL सर्वर के लिए विशेष रूप से चर्चा करते हुए कर रहा हूँ नहीं कर सकता हूँ।), लेकिन अगर आप चाहते हैं मानों को समेकित करने के लिए (जैसे पूर्ण नाम दिखाने के लिए पहले और अंतिम नामों को संयोजित करना) आपको आवश्यकता हो सकती है।

create table #temp (test varchar (10)) 

insert #temp 
values ('test ') 
insert #temp 
values ('test2 ') 
insert #temp 
values ('test ') 
insert #temp 
values ('test') 

select test + '1' from #temp 
select rtrim(test) +'1' from #temp 
select * from #temp where test = 'test' 
+1

हां, ह्यूग डार्वेन ने "द क्यूवे वाल" नामक अपने महान व्याख्यान में इस बारे में बात की और इसे एसक्यूएल डीबीएमएसएस – McKay

0

(n)varchar केवल उपयोग की गई जगह की मात्रा का उपयोग करता है, इसलिए इसमें सफेद स्थान शामिल नहीं होना चाहिए। यह आमतौर पर आवंटित होने पर char फ़ील्ड से अतिरिक्त स्थान को हटाते समय उपयोग किया जाता है, यानी char(30) केवल 10 वर्णों के साथ।

+0

एयू कॉन्ट्रैयर का बड़ा असफल माना जाता है। सेट ANSI_PADDING ... – gbn

+0

@ जीबीएन, आपने इसे फिर से किया! :) मैं तुमसे बहुत कुछ सीखता हूँ !! यह नल था | नल टुकड़ा जो मैं लापता था। –

+0

एमएसडीएन से नोट करने के लिए (http://msdn.microsoft.com/en-us/library/ms187403।एएसपीएक्स): माइक्रोसॉफ्ट एसक्यूएल सर्वर के भविष्य के संस्करण में ANSI_PADDING हमेशा चालू रहेगा और किसी भी एप्लिकेशन जो स्पष्ट रूप से बंद करने के विकल्प को सेट करता है, एक त्रुटि उत्पन्न करेगा। इस सुविधा का उपयोग नए विकास कार्यों में करने से बचें, और वर्तमान में इस सुविधा का उपयोग करने वाले अनुप्रयोगों को संशोधित करने की योजना बनाएं। –

0

LIKE ऑपरेटर के साथ एक अजीब मामला है। उदाहरण के लिए:

select 1 where convert(nvarchar(10), 'a') like convert(nvarchar(10), '%a ') 

परिणाम नहीं देगा।

3

सिद्धांत रूप में, हाँ, SET ANSI_PADDING की वजह से जो डिफ़ॉल्ट रूप से चालू है और हमेशा भविष्य में चालू रहेगा।

ईमानदार होने के लिए, मैं पढ़ने के लिए आरटीआरआईएम को लिखता हूं क्योंकि अधिक होता है। यह केवल आपके दिन को खराब करने के लिए होता है ...

0

यह निर्भर करता है, उदाहरण के लिए डेल्फी क्लाइंट डेटासेट और midas.dll इसके साथ उपयोग किया जाता है (कम से कम संस्करण 7 और पहले (अब पता नहीं) बग कि अगर Nvarchar फ़ील्ड में डेटा की लंबाई निर्दिष्ट एक से कम थी, तो उन्हें गद्दे मिलती थी।

डेटाबेस पक्ष में इतनी समस्या नहीं थी, लेकिन ग्राहकों में यह हमें थोड़ा कम नहीं करता था । मुसीबत की राशि

1

एसक्यूएल सर्वर (और अधिकांश अन्य एसक्यूएल DBMSs) वास्तव में चूसना जब यह इस तरह सामान के लिए आता है:

insert into Blah values ('careful '); 
insert into Blah values ('careful'); 

मान लें कि कोई आईडी कॉलम है या कुछ

मान समान होने की तुलना करेंगे, वही लंबाई होगी, लेकिन वास्तव में एक ही डेटा नहीं होगा। एक संगतता

select Bar + 'something' from Blah 

और एक में एक स्थान होगा, दूसरा नहीं होगा।

+1

डेटेलेंथ अंतर दिखाएगा, एलआईएन ट्रिम – gbn

+0

@ जीबीएन हाँ, डेटा वास्तव में अलग है, यह मेरा मुद्दा है। कॉन्सटेनेशन उदाहरण की तरह, मतभेदों को प्राप्त करने के तरीके हैं, लेकिन वे समान होने की तुलना करते हैं। एसक्यूएल की विफलता यह है कि यह गणितीय आधार में विफल रहता है: सभी ए = बी, एफ (ए) = एफ (बी) – McKay

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

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