Ngoài câu trả lời của gbn, bạn có thể làm cho chúng hoạt động giống nhau bằng cách sử dụng CompareOptions.StringSort trong C# (hoặc bằng cách sử dụng StringComparison.Ordinal). Điều này xử lý các ký hiệu khi xảy ra trước ký hiệu chữ và số, do đó "-" < "0".
Tuy nhiên, Unicode vs ASCII không giải thích bất cứ điều gì, vì mã hex cho mã ASCII được dịch nguyên văn sang mã Unicode: "-" là 002D (45) trong khi "0" là 0030 (48). .NET đang sử dụng phân loại "ngôn ngữ" theo mặc định, dựa trên thứ tự và trọng số phi thứ tự được áp dụng cho các ký hiệu khác nhau theo văn hóa được chỉ định hoặc hiện tại. Thuật toán ngôn ngữ này cho phép, ví dụ "résumé" (viết bằng dấu) xuất hiện ngay sau "resume" (viết không có dấu) trong danh sách sắp xếp các từ, vì "é" được đưa ra một thứ tự phân số ngay sau "e" và trước khi "f". Nó cũng cho phép "hợp tác" và "hợp tác" được đặt chặt chẽ với nhau, như biểu tượng dấu gạch ngang được cho thấp "trọng lượng"; nó chỉ quan trọng như là các bộ ngắt cuối cùng tuyệt đối khi sắp xếp các từ như "bit", "bit" và "bit-shift" (sẽ xuất hiện theo thứ tự đó).
Được gọi là sắp xếp thứ tự (theo đúng giá trị Unicode, có hoặc không có phân biệt chữ hoa chữ thường) sẽ tạo ra kết quả rất khác nhau và đôi khi phi logic, vì các biến thể của chữ thường xuất hiện tốt sau bảng chữ cái Latin chưa được đặt trước. trong khi các ký hiệu xuất hiện trước nó. Ví dụ: "é" xuất hiện sau "z" và do đó các từ "tiếp tục", "rosin", "rúp", "sơ yếu lý lịch" sẽ được sắp xếp theo thứ tự đó. "Bit's", "Bit-shift", "Biter", "Bits" sẽ được sắp xếp theo thứ tự như dấu nháy đơn đến trước, theo sau là dấu gạch ngang, sau đó là chữ "e", sau đó là chữ "s". Không phải điều này có vẻ hợp lý từ góc độ "ngôn ngữ tự nhiên".
Bạn có tính toán phân biệt chữ hoa chữ thường không? –
Các trường hợp giống nhau. Sự khác biệt là cách xử lý '0' đến '-'. –
Đây là một vấn đề Unicode tôi nghĩ. Chỉnh sửa: Có thể không. Đối với tôi, mã SQL Server trả về 'Lớn hơn'. Collation mặc định trong cơ sở dữ liệu bạn đang thử nghiệm nó là gì? –