Nghiêng của tôi là "sử dụng NVARCHAR" làm mặc định ... nhưng @CadeRoux có một điểm tốt: nếu bạn chắc chắn dữ liệu sẽ không bao giờ giữ bất kỳ thứ gì ngoài ASCII - như biển số xe của Mỹ - VARCHAR có thể giúp bạn tiết kiệm một chút chi phí.
Tôi muốn nói mặt trái của tuyên bố tốt của ông là "DO use NVARCHAR" cho bất kỳ thứ gì có tên (người, đường phố, địa điểm) hoặc văn bản ngôn ngữ tự nhiên (email, trò chuyện, bài viết, bài đăng trên blog, chú thích ảnh). Nếu không, cột "firstname" của bạn sẽ không thể mã hóa chính xác "François" hoặc "José" và các cột văn bản của bạn sẽ không cho phép văn bản có dấu phụ "nước ngoài" hoặc - cho vấn đề đó - các ký tự rất phổ biến ở Hoa Kỳ như dấu "¢", dấu phân đoạn "¶", dấu đầu dòng "•".(Vì không ai trong số đó là các ký tự ASCII và không có cách nào tốt, tiêu chuẩn để đưa chúng vào một trường VARCHAR. Hãy tin tôi đi: bạn sẽ tự làm tổn thương bản thân.)
BẤT CỨ dự án tôi đã làm việc trên , Tôi đã không bao giờ bị mắng vì đã sử dụng NVARCHAR vì tôi đã "lãng phí quá nhiều tiền của công ty vào không gian đĩa". Và nếu tôi phải làm lại mã hoặc lược đồ DB (đặc biệt là trên một hệ thống sản xuất trực tiếp), chi phí được chi tiêu lại sẽ DỄ DÀNG lớn hơn "tiết kiệm" khi mua một đĩa nhỏ hơn 50%.
Để thực sự hiểu câu hỏi này, bạn thực sự phải hiểu các mã hóa điển hình của ASCII, Unicode và Unicode (như UCS-2 và UTF-8).
Nguồn
2012-08-29 03:29:38
Xem điều này quá http://stackoverflow.com/q/35366/27535 – gbn
Đây không phải là lý do âm thanh, chủ yếu là do cơ sở không hợp lệ. Mục 3 quá rộng của một tuyên bố. Mục 4 đã lỗi thời một phần vì SQL Server 2008 đã giới thiệu PAGE và ROW Compression, và 2008 R2 đã thêm (tự động/hậu trường) Unicode Compression (nhưng Compression chỉ có sẵn trong Enterprise Edition). Mục 5 vô lý sai. Vui lòng xem câu trả lời của tôi ở đây để biết chi tiết: http://stackoverflow.com/a/32871477/577765 –