2009-04-10 12 views
12

Şu anda SQL Server 2000'i arka uç olarak çalıştıran bir asp.net web sitesi projesi miras aldım.varchar (max) MS SQL Server 2000, sorunları?

SQL Server 2005 Express kullanarak db'nin yerel bir kopyasında bazı veritabanı değişiklikleri yapıyorum. varchar(max) sütunları kullanarak bir tablo oluşturdum. Keyfi uzunluktaki XHTML parçacıklarını saklamak için kullanılırlar. Ben bu rastladı stackoverflow etrafında gezinirken

: Are there any disadvantages to always using nvarchar(MAX)?

Kullanıcı mattruma o SQL Server varchar(max) kullanma hakkında "zor yoldan" öğrendim diyor 2000

Ben varchar(max) yerine ne kullanmalıyım canlı veritabanı SQL Server 2000'de çalıştığı için mi?

Yardımlarınız için şimdiden teşekkür ederiz!

cevap

11

Canlı DB'niz, bunları desteklemeyen SQL Server 2000 ise, varchar(MAX) sınırlamaları bir moot noktasıdır. Saklamak için 8K'dan fazla karakteriniz varsa, diğer bir seçenek olan bir TEXT sütunuyla oldukça fazla kalırsınız. Ancak, TEXT sütunlarının da çok fazla kısıtlaması olduğunu unutmayın. Örneğin, bunları kolayca sıralayamaz veya gruplayamazsınız, bunları diğer sütunlarla eşdeğerlik açısından karşılaştıramazsınız. Yani Select * from mytable where Mytext1 = mytext2 diyemezsiniz.

ilgili diğer kaygıları:

  • Ben bakılmaksızın Unicode destekleyen gidin şekilde bir NText veya NVarchar sütunu kullanılarak öneririm.
  • Tablonun başka bir çok sütunu varsa ve varchar(8000) sütununun sık sık dolu olması muhtemelse, 8K satır sınırıyla ilgili sorunlarınız olabilir. Bunu da aklında tut.
1

Bir TEXT sütunu kullanın.

+0

Metin alanı kullanırsanız, o alandaki olası aramaları engeller. – TheTXI

+0

@TheTXI - OP'nin sorgusunda o sütunda arama ile ilgili hiçbir şey yoktur. –

+0

TEXT veri türünü kullanmanızı önermem, çünkü [Microsoft SQL Server'ın gelecekteki bir sürümünde kaldırılacaktır] (http://msdn.microsoft.com/en-us/library/ms187993.aspx). –

15

VARCHAR(Max) SQL Server 2005'te tanıtıldı ve SQL Server 2000 üzerinde çalışmayacak. Yeterli büyük olacak şekilde VARCHAR(8000) kullanmanız gerekir. Aksi takdirde kullanmanız gerekecektir TEXT

Düzenleme Ayrıca akılda tutmak tek bir satır daha sonra 8060 bayt olamaz bir sınırı vardır VARCHAR(8000) geçerseniz

. Yani bir varchar(8000) tablosunu doldurursanız ve bir sürü başka büyük sütununuz varsa, bir hata alırsınız. Burada Text'un geldiği yer budur.

Text, performansla ilgili bir içeriğe sahiptir çünkü varsayılan olarak ayrı bir konumda depolanır ve bir işaretçiyi bir tabloda tutar. Bu davranışı değiştiren, metin türlerinin belirli bir boyuta ulaşana kadar tabloda tutulması için bir ayar seçeneği vardır. Çoğunlukla küçük lekeler varsa, bunu etkinleştirmek isteyebilirsiniz.

+0

VARCHAR (8000) 'e geçmek zorundaydık. – mattruma

0

Bu, ihtiyaçlarınıza bağlı olarak değişir. VARCHAR (MAX) yerine bir TEXT sütunu kullanabilirsiniz, ancak TEXT ve NTEXT alanlarındaki karşılaştırmaları yapamayacağınızdan, uygulamanızın o alanda arama yapması gerekmediğinden emin olmalısınız.

Kendinizi 8000 karakterle sınırlandırabiliyorsanız, bilgileri depolamak için bir VARCHAR (8000) sütunu kullanırdım.

+0

nvarchar (4000) demek istediniz? Ya da varchar (8000)? – gbn

+0

iyi yakalama, yanıtı güncelledim. –