2017-08-16 98 views
0

我想確定哪個mysql變量類型應該使用,當我想存儲一個字符串是可選的,並且大多數情況下它將爲空。 我想用BLOBTEXT像變量,而不是爲varchar這裏是我支持的原因:哪些數據類型應該用於mysql中的可選字符串?

  1. 我想可選的字符串內有64個kb.I多個長度不希望數據截斷。
  2. 在正常情況下,TEXT變量沒有數據填充,這對於短暫測試來說非常緊湊。
  3. 瞭解這些類型的數據在表區域外分配並且在檢索時有開銷,我準備好接受這個小開銷;因爲我會少用它。

例子是:

 column_a | column_b| column_c| column_d| optional_column 
---------------+---------+---------+---------+----------------- 
asdfasdf  |asdfasdf |sdfsdfas |dadasd |NULL 
asdfasdf  |asdfasdf |sdfsdfas |dadasd |NULL 
asdfasdf  |asdfasdf |sdfsdfas |dadasd |as,fgdfg 
asdfasdf  |asdfasdf |sdfsdfas |dadasd |NULL 
asdfasdf  |asdfasdf |sdfsdfas |dadasd |NULL 
asdfasdf  |asdfasdf |sdfsdfas |dadasd |asd,asda 
asdfasdf  |asdfasdf |sdfsdfas |dadasd |NULL 
asdfasdf  |asdfasdf |sdfsdfas |dadasd |NULL 
asdfasdf  |asdfasdf |sdfsdfas |dadasd |NULL 
asdfasdf  |asdfasdf |sdfsdfas |dadasd |NULL 
asdfasdf  |asdfasdf |sdfsdfas |dadasd |{"asdasd":"Asdas".... 

根據我的情況,請給我建議。 fyi我正在考慮使用TEXT。 在此先感謝。

+0

複製如果您希望將不同的數據類型存儲在它特別JSON我將存儲的從另一張桌子的鑰匙。在該表格中,我會將每個可接受的類型存儲在列中。這導致一些更多的空值,但它也爲搜索,過濾等提供了巨大的優勢。如果你只是想存儲文本,比使用文本不blob。 – Doomenik

回答

0

您應該使用TEXT字段,因爲文本就是您存儲的內容。應該使用BLOB字段來存儲像圖像這樣的二進制數據。 這兩種字段類型都是可搜索的,如果需要的話。所以它更可能是一個設計決定。我更喜歡使用它應該存儲的類型。

+0

感謝迴應,順便說一句,我意識到這一點:)。 –

+0

@PreetamKumar如果你知道上述情況,那麼你爲什麼首先提出這個問題? – Shadow

+0

@Shadow我沒有提到使用BLOB,我提到過TEXT和BLOB就像數據類型(我明白使用TEXT)。所以我想根據我的情況提出建議。 –

0

TEXT用於大塊字符串數據。如果字段的長度超過某個閾值,則文本將存儲在行外。

VARCHAR始終存儲在行中並且具有限制個字符。如果您嘗試創建一個VARCHAR(x),其中X> 8000,你會得到一個錯誤:

Server: Msg 131, Level 15, State 3, Line 1

The size() given to the type ‘varchar’ exceeds the maximum allowed for any data type (8000)

這些長度限制做不關注VARCHAR(MAX)SQL Server 2005中,可以存儲在行外,只像TEXT

請注意,MAX這裏不是一種常數,VARCHARVARCHAR(MAX)是非常不同的類型,後者非常接近TEXT

的SQL Server的早期版本你不能直接訪問TEXT,你只能得到一個TEXTPTRREADTEXTWRITETEXT功能使用它。

SQL Server 2005中您可以直接訪問TEXT列(雖然你仍然需要一個顯式的VARCHAR爲它們分配一個值)。

TEXT好:

  • 如果你需要較大的文本存儲在數據庫中
  • 如果如果你很少選擇此列,難道你不列上
  • 值搜索加入它。

VARCHAR好:

  • 如果存儲小串
  • 如果你搜索的字符串值
  • 如果你總是選擇,或在連接使用它。

通過選擇這裏我的意思是發出任何查詢返回列的值。

通過搜索這裏我的意思是發出任何查詢,其結果取決於TEXTVARCHAR列的值。這包括在任何JOINWHERE條件中使用它。

由於TEXT存儲在行外,因此不涉及TEXT列的查詢通常會更快。

什麼TEXT是良好的一些例子:

  • 博客評論
  • Wiki頁面
  • 代碼源

什麼VARCHAR有利於一些例子:

  • 用戶名
  • 頁面標題
  • 文件名

作爲一個經驗法則,如果你需要你的文本價值超過字符不使用加入此列,使用TEXT

否則使用VARCHAR

P.S.同樣適用於UNICODE啓用NTEXTNVARCHAR以及上面的示例。

P.P.S.這同樣適用於VARCHAR(MAX)NVARCHAR(MAX),即SQL Server 2005+使用而不是TEXTNTEXT。如果您希望它們始終存儲在行外,您需要爲它們啓用large value types out of row,並使用sp_tableoption

如上文和here提到,TEXT會在未來的版本中被取消:

The text in row option will be removed in a future version of SQL Server. Avoid using this option in new development work, and plan to modify applications that currently use text in row . We recommend that you store large data by using the varchar(max) , nvarchar(max) , or varbinary(max) data types. To control in-row and out-of-row behavior of these data types, use the large value types out of row option.

SQL Server Text type vs. varchar data type

+0

因此,我建議使用'Text'作爲變量類型 – SacrumDeus

+2

很好的答案。只有一個小故障:問題是關於MySQL而不是MS SQL服務器。 – Shadow

+0

@SacrumDeus謝謝你的答案,它是精心製作的。我可以看到你在與Microsoft SQL服務器的上下文中表達。如果你可以向MySQL保證,那真的會有幫助。 –

相關問題