我相信這個問題的答案是「不」,但我對社區意見很感興趣。一個varchar或nvarchar值應該自動修剪尾隨的空格,所以我不認爲我應該永遠不必在這個值上調用RTRIM()。有沒有專家有我需要的理由?我是否需要在varchar或nvarchar值上調用RTRIM()?
(如果標籤不說清楚,我特別提到到Microsoft SQL Server。)
我相信這個問題的答案是「不」,但我對社區意見很感興趣。一個varchar或nvarchar值應該自動修剪尾隨的空格,所以我不認爲我應該永遠不必在這個值上調用RTRIM()。有沒有專家有我需要的理由?我是否需要在varchar或nvarchar值上調用RTRIM()?
(如果標籤不說清楚,我特別提到到Microsoft SQL Server。)
如果ANSI_PADDING是ON,則尾隨空格將被存儲,即使爲varchar/nvarchar數據類型,所以是。
您可能不需要RTRIM得到的值出一個簡單的選擇,但如果你想將您可能需要的值(例如,結合姓名和姓氏以顯示全名)聯合起來。
運行這個測試,看看我的意思是:
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'
是的,Hugh Darwen在他的題爲「The Askew Wall」的傳奇式演講中談到了這一點,並認爲它是SQL DBMS的主要失敗之一 – McKay 2010-11-01 19:23:31
(n)varchar
只利用了使用的空間量,所以它不應該包含空格。通常用於從分配過多的char
字段中刪除額外空間,即僅包含10個字符的。
Au contraire。 SET ANSI_PADDING ... – gbn 2010-11-01 19:23:22
@gbn,你又做到了! :)我從你那裏學到很多東西!這是我遺失的NULL | NOT NULL片斷。 – 2010-11-01 19:26:19
從MSDN注意(http://msdn.microsoft.com/en-us/library/ms187403。aspx):在未來版本的MicrosoftSQL Server中,ANSI_PADDING將始終爲ON,並且任何將該選項明確設置爲OFF的應用程序都會產生錯誤。避免在新開發工作中使用此功能,並計劃修改當前使用此功能的應用程序。 – 2010-11-01 19:27:32
LIKE
運營商存在一個奇怪的情況。例如:
select 1 where convert(nvarchar(10), 'a') like convert(nvarchar(10), '%a ')
不會返回結果。
理論上,是的,因爲SET ANSI_PADDING
默認爲ON,並且將來總是ON。
說實話,我傾向於寫在RTRIM上,因爲這樣可以避免在閱讀中發生這種情況。遠遠更多。它只會發生一次,以破壞你的一天...
它取決於,例如德爾福客戶端數據集和midas.dll使用它(至少版本7和以前(不知道現在)曾經有錯誤的是,如果Nvarchar字段中的數據長度小於指定的數據長度,那麼它們將用於填充。
在數據庫方面沒有這麼多問題,但在客戶端它沒有造成什麼問題。麻煩量
SQL服務器(以及大多數其他的SQL數據庫管理系統)實在太爛,當談到這樣的東西:
insert into Blah values ('careful ');
insert into Blah values ('careful');
假設有一個id列或其他東西
值會比較相同,據說會有相同的長度,但實際上不會有相同的數據。級聯
select Bar + 'something' from Blah
和一個會有空間,另一個不會。
我從來沒有。 – 2010-11-01 19:14:08