2011-02-08 36 views
19

Tôi chỉ nhận ra rằng máy chủ SQL '=' so sánh khi được sử dụng để so sánh văn bản là trường hợp không nhạy cảm. Tôi có một số câu hỏi liên quan đến chức năng này:Tại sao SQL Server '=' so sánh không phân biệt chữ hoa chữ thường?

  1. Điều này có giống nhau cho tất cả cơ sở dữ liệu hoặc cụ thể cho máy chủ SQL không?
  2. Tôi đã sử dụng chức năng lower để đảm bảo so sánh văn bản không nhạy cảm cho đến bây giờ. Vẫn còn ý tưởng tốt để làm theo cùng?
  3. Làm cách nào để chúng tôi có thể so sánh trường hợp nhạy cảm trong máy chủ SQL?
  4. Tại sao là '=' điều hành mặc định cho trường hợp so sánh không phân biệt chữ hoa chữ thường?
+0

Tôi chắc rằng điều này cũng giống nhau đối với bất kỳ cơ sở dữ liệu nào có collation phân biệt chữ hoa chữ thường. Đó là gần như nếu không hoàn toàn nền tảng bất khả tri (MySQL, SQL Server, PostgreSQL, vv). – BoltClock

+7

Nó có thể ** hoàn toàn ** ** BE ** phân biệt chữ hoa chữ thường - nó phụ thuộc vào ** collation ** cơ sở dữ liệu SQL Server của bạn sử dụng! –

+4

@marc_s: Thật điên rồ, nó có thể hoạt động :) –

Trả lời

24

Không, trường hợp độ nhạy không liên quan gì đến dấu bằng.

Độ nhạy trường hợp được xác định bởi collation cho cơ sở dữ liệu - see the documentation for details.

+0

Không xảy ra để có bất kỳ thông tin nào về tiêu chuẩn SQL-92 hoặc nói như thế nào về trường hợp nhạy cảm và đối chiếu? –

+0

@pst: Chỉ có điều tôi biết về ANSI & collation là việc xử lý không gian đệm và dấu, xin lỗi. –

+0

Trong trường hợp nhạy cảm của Microsoft SQL Server được xác định bằng cách đối chiếu (các) cột có liên quan chứ không phải do sự đối chiếu của cơ sở dữ liệu. – sqlvogel

3

Độ nhạy trường hợp của các thao tác trong SQL Server được xác định trong khi cài đặt khi bạn đặt đối chiếu cho cơ sở dữ liệu. Tại thời điểm đó, bạn có thể chọn cài đặt SQL Server như trường hợp không nhạy cảm (mặc định) hoặc phân biệt chữ hoa chữ thường.

http://msdn.microsoft.com/en-us/library/aa197951(v=sql.80).aspx

+0

Trong trường hợp nhạy cảm của Microsoft SQL Server được xác định bằng cách đối chiếu (các) cột có liên quan chứ không phải do sự đối chiếu của cơ sở dữ liệu. – sqlvogel

1

thế nào so sánh được thực hiện phụ thuộc vào đối chiếu mà bạn đã chọn cho lĩnh vực này. Nếu bạn thay đổi trường để sử dụng một trường hợp collation sensetive, các so sánh sẽ được trường hợp sensetive.

Theo trường mặc định sử dụng tập hợp đối chiếu cho cơ sở dữ liệu, nhưng mỗi trường có thể có cài đặt đối chiếu riêng.

11

Độ nhạy trường hợp chỉ phụ thuộc vào đối chiếu. Bạn có thể chỉ định collation trong mỗi hoạt động '='

SELECT * 
    FROM [Table_1] a inner join 
     [Table_2] b on a.Col1=b.Col2 collate Modern_Spanish_CS_AI 
3

Tôi đã được sử dụng chức năng thấp hơn để đảm bảo việc so sánh văn bản là không nhạy cảm cho đến bây giờ. Vẫn còn ý tưởng tốt để làm theo cùng?

Tuyệt đối không. Nói chung, bạn sẽ loại trừ việc sử dụng chỉ mục nếu bạn làm điều này. Đồng bằng cũ = (hoặc < hoặc> hoặc bất kỳ thứ gì) sẽ hoạt động hoặc không tùy thuộc vào việc đối chiếu bạn đã chọn. Đừng làm điều này "chỉ để được an toàn". Thử nghiệm sẽ đảm bảo bạn đã làm đúng.

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