Đề xuất giữ tất cả các đối chiếu cột vào cơ sở dữ liệu mặc định có vẻ giống như hướng dẫn hoặc thực tiễn tốt nhất đối với tôi.
Bạn hoàn toàn chính xác ở đây.
Tại sao nó được coi là một lỗi nghiêm trọng như vậy bởi một số?
Vì lý do tương tự mà bạn sẽ thường nghe / đọc rằng "bạn không bao giờ nên sử dụng:"
- HIỆN TẠI
GOTO
các câu lệnh
- SQLCLR
WITH (NOLOCK)
- vân vân, vân vân
Một số tính năng / tùy chọn / công nghệ phức tạp hơn các tính năng khác và thường đòi hỏi nhiều kiến thức hơn bởi người dùng vì khả năng gặp rắc rối khi sử dụng nó lớn hơn nhiều so với khả năng không gặp vấn đề gì. Vì vậy, sẽ dễ dàng hơn để có các quy tắc tổng quát chống lại những điều như vậy cho dân số nói chung. Trên thực tế, khi viết lên "Tiêu chuẩn mã hóa" tại nơi làm việc, tôi sẽ luôn có một quy tắc là không bao giờsử dụng HIỆN TẠI, nhưng tôi tự sử dụng chúng vì tôi biết cả "khi nào" để sử dụng chúng và "cách" sử dụng chúng một cách hiệu quả. Nhưng những người chỉ thỉnh thoảng viết các truy vấn không nên mong đợi để biết điều đó. Điều này cũng tương tự như "không chỉnh sửa Sổ đăng ký trừ khi bạn hoàn toàn biết bạn đang làm gì" hoặc các quy tắc mà chúng tôi đưa ra với tư cách là cha mẹ cho những đứa trẻ (rất nhỏ) của chúng tôi, nơi chúng tôi cần bảo chúng đừng làm điều gì đó đơn giản vì chúng là không có khả năng vượt qua sự phức tạp của thời điểm nào là ổn để làm một việc cụ thể hoặc làm thế nào để thực hiện nó.
Trong trường hợp Collations, đây là một chủ đề rất phức tạp và khó hiểu và bạn có thể gặp cả hai lỗi cứng (đây là một vấn đề nhưng ít xảy ra sự cố vì chúng rõ ràng và do đó đủ dễ sửa) và thành "lẻ" hành vi khó giải thích tại sao mọi thứ lại hoạt động theo cách của chúng (tại sao một số mặt hàng được lọc hoặc không được lọc, ngoài mong đợi, HOẶC tại sao sắp xếp lại hoạt động ngoài mong đợi). Và đáng buồn thay, dường như có một số lượng lớn thông tin sai lệch trôi nổi xung quanh mà làm xáo trộn sự nhầm lẫn hàng loạt. Tôi thực sự đang làm việc trong một dự án để tăng đáng kể kiến thức chung về Collations và mã hóa, v.v.
Đối với Collation, bạn cần sử dụng những gì có ý nghĩa nhất cho trường hợp kinh doanh. Khái niệm không trộn Collations trong bảng hoặc cơ sở dữ liệu là một cách tiếp cận mặc định, nhưng nếu bạn nhìn vào Collations được sử dụng cho các cột khác nhau của các khung nhìn danh mục hệ thống, bạn sẽ thấy nhiều Collations được sử dụng. Vì vậy, tôi đồng ý với trích dẫn chính trong câu hỏi NẾU Bộ sưu tập sẽ khác đi, nó nên có chủ ý, nhưng không có gì sai với nó.
Về điều này từ câu hỏi (nhấn mạnh thêm):
Trong khi định cấu hình Máy chủ triển khai Octopus, thiết lập không thành công với lỗi FATAL trong quá trình khởi tạo phiên bản OctopusServer. Bài viết liên quan đến thông báo lỗi không giải thích tại sao đây là một yêu cầu
Tôi đã kiểm tra trang tài liệu được liên kết và nó thực sự giải thích tại sao nó là một yêu cầu. Tôi đã sao chép thông tin thích hợp từ tài liệu đó bên dưới:
Bạn phải đảm bảo bạn cũng thay đổi đối chiếu tất cả các đối tượng trong Cơ sở dữ liệu Octopus, nếu không, có thể xảy ra lỗi khi sửa đổi cơ sở dữ liệu trong quá trình nâng cấp phiên bản Octopus. Các đối tượng mới được tạo sẽ sử dụng đối chiếu được cập nhật và khi cố gắng (ví dụ) thực hiện các phép nối SQL giữa các đối tượng này và các đối tượng hiện có bằng cách sử dụng đối chiếu ban đầu, có thể xảy ra lỗi đối chiếu sai đối chiếu.
Họ đang nói rằng mã của họ, trong cơ sở dữ liệu Octopus, có THAM GIA giữa các cột chuỗi và có thể có mã mới được giới thiệu trong bản nâng cấp trong tương lai có THAM GIA bổ sung trên các cột chuỗi mới . Các cột mới, thông qua CREATE TABLE
hoặc ALTER TABLE ... ADD
, sẽ được chỉ định Đối chiếu cơ sở dữ liệu mặc định nếuCOLLATE
từ khóa không được chỉ định cho (các) cột chuỗi mới. Và THAM GIA giữa các cột chuỗi không có Collation giống nhau sẽ tạo ra lỗi không khớp Collation. Họ dường như cũng cho phép người dùng chọn Collation của riêng họ (có thể phù hợp với các địa phương khác nhau) vì họ nói rằng yêu cầu duy nhất là Collation không phân biệt chữ hoa chữ thường. Và vì Collation của cơ sở dữ liệu mà mã của họ tồn tại không được đảm bảo giống nhau, nên họ không thể sử dụng COLLATE
từ khóa để buộc Collation giống nhau trên tất cả các cột chuỗi mới (tốt, về mặt kỹ thuật có thể, nhưng điều đó đòi hỏi phải có Động SQL không dễ đối phó khi tạo tập lệnh cập nhật). Nếu họ có thể sử dụng COLLATE
từ khóa, thì họ có thểtránh xa việc đối chiếu mặc định của Cơ sở dữ liệu khác với các cột chuỗi. Điều đó sẽ tránh được các lỗi "Collation không khớp" cứng, nhưng vẫn để ngỏ khả năng các hoạt động so sánh liên quan đến một trong các cột chuỗi đó và một chuỗi ký tự hoặc biến chuỗi dẫn đến hành vi "lẻ" vì nó sẽ sử dụng Collation của cột chứ không phải của Cơ sở dữ liệu Đối chiếu. Tất nhiên, đó rất có thể là hành vi được mong đợi. Nhưng vì đây là ứng dụng của bên thứ 3, nên hành vi phải là những gì họ dự định thay vì cơ hội 50/50 giữa a) những gì người dùng muốn (hoặc không phản đối) và b) những gì người dùng coi là lỗi (và sau đó lãng phí thời gian hỗ trợ của nhà cung cấp cho một cuộc rượt đuổi ngông cuồng và / hoặc blog về cách phần mềm của họ bị lỗi).