2009-04-28 38 views
8

Theo sqlite3 documentation,Từ khóa COLLATE làm gì khi tạo chỉ mục sqlite?

Mệnh đề đối chiếu sau mỗi tên cột định nghĩa một đối chiếu chuỗi sử dụng cho các mục văn bản trong đó cột. Trình tự đối chiếu mặc định là chuỗi sắp xếp được xác định cho cột đó trong câu lệnh CREATE TABLE . Hoặc nếu không có trình tự đối chiếu nào khác được xác định, thì sẽ sử dụng trình tự ghép nối BIN2 được xây dựng trong .

Trình tự đối chiếu làm gì và chuỗi đối chiếu BINARY là gì?

Trả lời

5

Đó là cách mà động cơ sql yêu cầu dữ liệu nội bộ. Binary Collation làm những gì nó gợi ý, nó so sánh nhị phân. Nói chung nó là collation nhanh nhất mặc dù tôi chưa bao giờ định lượng nó, vì nó kiểm tra các mẫu bit, có nghĩa là nó là trường hợp và giọng không nhạy cảm.

1

So sánh nhị phân so sánh chuỗi byte của bạn theo byte, như trong bảng unicode. Ví dụ: A, B, a, b. Một trường hợp nhạy cảm sẽ là: a, A, b, B.

Lợi thế của việc đối chiếu nhị phân là tốc độ của nó, vì so sánh chuỗi rất đơn giản/nhanh. Trong trường hợp chung, các chỉ mục có nhị phân có thể không tạo ra kết quả mong đợi để sắp xếp, tuy nhiên đối với các kết quả khớp chính xác, chúng có thể hữu ích.

COLLATE NOCASE cũng ảnh hưởng đến truy vấn trường hợp nhạy cảm.

Nếu bạn có một cột với các giá trị: 'aa', 'AA'

select * from table where col = 'aa' 

Nếu bạn đã tạo ra cột của bạn với đối chiếu NOCASE nó sẽ trả lại cả hai 'aa' và 'AA'. Nếu không, nếu bạn không chỉ định nó, nó sẽ chỉ trả về 'aa'.

Bạn cũng có thể xác định nó trong một truy vấn (đây là chậm hơn sau đó nếu bạn đã tạo ra cột của bạn với đối chiếu NOCASE)

select * from table where col = 'aa' COLLATE NOCASE 
Các vấn đề liên quan