2009-02-16 53 views
6

Tôi đang thiết kế một sơ đồ cơ sở dữ liệu ngay bây giờ và tôi chỉ để an toàn Tôi nên sử dụng nvarchar cho kiểu dữ liệu của cột văn bản của tôi (để hỗ trợ unicode). Trong khi tôi không mong đợi văn bản không phải tiếng Anh tôi tìm nó sẽ là tốt hơn để có hỗ trợ nó từ đầu chỉ trong trường hợp.Có một lý do tại sao tôi không nên sử dụng NVARCHAR trong Sql Server?

Có bất kỳ lý do nào khiến tôi nên dính bằng varchar đơn giản không? Hiệu suất?

+0

Tôi muốn thêm phiên bản SQL Server vào câu hỏi của bạn, nó có thể tạo sự khác biệt? – Ash

+0

Tôi đang sử dụng máy chủ sql 2005 hiện tại nhưng chúng tôi đang tìm cách chuyển sang năm 2008 cuối cùng. – mmcdole

Trả lời

1

Có, hiệu suất, về kích thước. nvarchar mất nhiều byte, tôi nghĩ rằng nó là gấp đôi (đúng tôi nếu tôi sai) và điều này là do sự hỗ trợ unicode. Vì vậy, nếu bạn không cần hỗ trợ unicode, đi với varchar thường xuyên.

+0

Trong khi tôi không chắc chắn mã hóa unicode nào họ sử dụng trong SQL SERVER, nó có thể thay đổi. Tức là, một ký tự trong unicode có thể ở bất cứ đâu từ 1-4 byte trong một số mã hóa. – mmcdole

+0

Máy chủ SQL được sửa UTF-16 –

+0

@Marc Gravell, gotchya. – mmcdole

11

Trong thế giới i18n ngày nay, nvarchar có nhiều ý nghĩa. varchar có thể có ý nghĩa đối với dữ liệu được chỉ định không được unicode (có lẽ bạn có một số trường hệ thống được yêu cầu là ASCII).

Tôi muốn sử dụng nvarchar theo mặc định cho những thứ như tên, mô tả, địa chỉ, vv

varchar là nhỏ hơn, do đó, có lẽ một số tiền tiết kiệm với varchar qua nvarchar IO (nhưng lưu ý rằng mã trang trở thành một vấn đề lớn hơn nữa).

4

Ngoài ra, xem câu hỏi này: VARCHAR vs NVARCHAR performance.

Cá nhân, tôi nói dính vào varchar (như tôi đã trả lời trong chủ đề này). Có một chi phí hoạt động không tầm thường.

1

Chúng tôi sử dụng VARCHAR cho hầu như mọi thứ, và NVARCHAR chỉ rất rất thỉnh thoảng.

Codes sản phẩm không cần nvarchar - chúng tôi không cho phép bất cứ điều gì khác ngoài AZ, 0-9 và "_" trong họ ...

của nó gấp đôi không gian lưu trữ, nhưng cũng chỉ có một nửa mục trên mỗi trang chỉ mục (và trên mỗi trang dữ liệu) và một nửa bộ nhớ cache bộ nhớ là "lãng phí", chu kỳ CPU hơn để so sánh dữ liệu, và như vậy.

IME các điểm nhấn nước ngoài thường được sử dụng chỉ hoạt động trong Varchar (nghĩa là LATIN-1). Chúng tôi không có kế hoạch để làm Trung Quốc hoặc các bộ ký tự thay thế khác, và khi chúng tôi có thể xử lý các nhân vật đó bằng cách sử dụng NVarchar từ Day One sẽ là ít nhất của những lo lắng của chúng tôi - Phải-trái hoặc dọc của văn bản ?? :(

Và nếu bạn cho phép NVarchar, ví dụ: Tên bạn sẽ nhập charcater mở rộng từ bàn phím của bạn như thế nào? Và nếu bạn nhập dữ liệu (vì vậy nó đã là NVarchar), bạn sẽ như thế nào có thể tìm kiếm khách hàng đó bằng bàn phím QWERTY tiêu chuẩn của bạn. Rất nhiều và rất nhiều thứ liên quan đến việc quốc tế hóa ứng dụng, vì vậy quan điểm của tôi là không có điểm "cho phép bằng cách sử dụng NVarchar".

Nhưng có rất nhiều nơi tôi đi để có NVarchar ... và hầu hết các cột đều có chiều rộng 50 ký tự .... họ phải biết điều gì đó về tăng trưởng dân số và kế hoạch mở rộng cho các mã ZIP mà tôi không làm như vậy !!

1

Như đã đề cập, thương mại tắt là tương lai-proofing so với hiệu suất. Theo kinh nghiệm của tôi, SQL Server hoạt động khá tốt với giới hạn CPU và bộ nhớ thấp hơn, nhưng cung cấp cho nó một I/O đĩa chậm và nó có thể thực sự chug.

Nếu bạn không có kế hoạch cho bộ ký tự hai byte (tức là ký tự tiếng Trung), hãy gắn với VARCHAR (MAX).

0

Nói chung; Bắt đầu với loại dữ liệu đắt nhất có ít ràng buộc nhất. Đặt nó vào sản xuất. Nếu hiệu suất bắt đầu là một vấn đề, hãy tìm hiểu những gì đang thực sự được lưu trữ trong các cột nvarchar đó. Có bất kỳ nhân vật trong đó sẽ không phù hợp với varchar? Nếu không, chuyển sang varchar. Đừng cố gắng tối ưu hóa trước khi bạn biết đau ở đâu. Tôi đoán là sự lựa chọn giữa nvarchar/varchar không phải là những gì sẽ làm chậm ứng dụng của bạn trong tương lai gần. Sẽ có các phần khác của ứng dụng, nơi điều chỉnh hiệu suất sẽ cung cấp cho bạn nhiều hơn nữa bang cho Bucks.

Các vấn đề liên quan