2015-04-12 48 views
1

我有一個表,是列:使用實體框架保存空字符串,將字符串保存爲空格?

QuestionDescription nchar(150) 

表的名稱是Questions。當我把在實體Questions一個空字符串,這意味着:

Questions questionObj = new Questions(); 
questionObj.QuestionDescription = string.Empty(); 

實體框架保存在數據庫中150個空格的字符串。

爲什麼?

我試圖把一個空字符串,但它總是會放150個空格。

任何想法爲什麼?

謝謝

+2

這不是責備的實體框架 - 這是** SQL Server **導致存儲「空白」(因爲你基本上使用*錯誤*數據類型)。如果您使用直接的原始ADO.NET,則可以觀察到同樣的效果 - 這與EF無關。...... –

+1

注意:空白字符是一種字符類別,包括空格,製表符和換行符。你在說的是空間角色。 – Guffa

回答

5

這是因爲類型是nchar而不是nvarchar。與nchar它將始終是一個值與您指定的字符的確切數量,因此它將由數據庫填充空間,而不是EF。如果你想在你的數據庫中一個實際上是空的字符串,那麼你應該使用nvarchar,這樣可以將字符串值保存到你給出的大小,而不用填充到給定的大小。

4

這是數據庫的問題。 nchar是固定長度。嘗試nvarchar數據類型代替

1

我建議ü使用nvarchar數據類型而不是 nchar是固定長度,nvarchar是變化的長度。通常情況下,我會建議您始終使用nvarchar,除非您有一個短的(< 5個字符)字段,並且您100%確定它是一個集合的大小。

開頭的「n」表示存儲Unicode數據的雙字節字符。如果您需要處理多種語言或使用雙字節字符(如中文)的語言,請使用它。