2011-10-22 45 views
143

Điều này đã được yêu cầu trên trang web này trước đây nhưng tôi không thể tìm thấy câu trả lời đầy đủ. Nếu tôi đang thực hiện một truy vấn như:Truy vấn nhạy cảm với trường hợp MySQL

Select Seller from Table where Location = 'San Jose' 

Làm cách nào để chỉ trả lại Người bán có Vị trí 'San Jose' thay vì 'san jose' hoặc cái gì khác?

+1

Sử dụng [COLLATE] (http://dev.mysql.com/doc/refman/5.0/en/charset-collate.html) –

+3

bản sao có thể có của [Làm cách nào để có thể so sánh chuỗi nhạy cảm với trường hợp SQL trên MySQL?] (http://stackoverflow.com/questions/5629111/how-can-i-make-sql-case-sensitive-string-comparison-on-mysql) – ks1322

+1

Câu trả lời hàng đầu tốt hơn COLLATE, imo, bởi vì nó đơn giản hơn . –

Trả lời

375

Truy vấn MySQL không phân biệt chữ hoa chữ thường theo mặc định. Sau đây là một truy vấn đơn giản đang tìm kiếm 'giá trị'. Tuy nhiên nó sẽ trở lại 'VALUE', 'giá trị', 'giá trị', vv ...

SELECT * FROM `table` WHERE `column` = 'value' 

Tin tốt lành là nếu bạn cần phải thực hiện một truy vấn case-sensitive, nó là rất dễ dàng để làm bằng cách sử dụng BINARY nhà điều hành, trong đó buộc một byte bởi byte so sánh:

SELECT * FROM `table` WHERE BINARY `column` = 'value' 
49

để cải thiện James' câu trả lời tuyệt vời:

Nó tốt hơn để đưa BINARY trước hằng số thay vì:

SELECT * FROM `table` WHERE `column` = BINARY 'value' 

Đặt BINARY trước column sẽ ngăn việc sử dụng bất kỳ chỉ mục nào trên cột đó.

+0

Làm thế nào để thêm nó vào "LIKE"? –

+0

@Purushotamrawat chỉ cần thay thế = bằng LIKE ... SELECT * FROM 'table' WHERE' column' LIKE BINARY '% value%' – NVG

16

Trong khi câu trả lời được liệt kê là chính xác, tôi có thể đề nghị rằng nếu cột của bạn là để giữ các chuỗi nhạy cảm, bạn đọc the documentation và thay đổi định nghĩa bảng của bạn cho phù hợp.

Trong trường hợp của tôi này lên tới xác định cột của tôi là:

`tag` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT '' 

Đây là theo ý kiến ​​của tôi ưu đãi cho điều chỉnh truy vấn của bạn.

+1

Tôi đã chỉnh sửa để sửa chữa những gì tôi khá chắc chắn là một lỗi đánh máy ngớ ngẩn chính xác là ngược lại về những gì bạn muốn nói. Tôi cảm thấy như tôi phải thông báo cho bạn, mặc dù (và vì đó là một thay đổi hai nhân vật trang web sẽ không thông báo cho bạn tự động). Giả sử bạn hài lòng với thay đổi này, hãy cứ gắn cờ nhận xét của tôi là lỗi thời và để nó bị nuked. (Và nếu tôi đã say mê, hãy hét lên với tôi.) –

+1

đây phải là câu trả lời được chấp nhận. – mathheadinclouds

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