按照sqlite3 documentation,COLLATE關鍵字在創建sqlite索引時做了什麼?
每個 列名稱後面的COLLATE子句定義用於該 列文本條目的整理 序列。默認的整理序列 是針對 定義的整理序列,即CREATE TABLE 語句中的列。或者如果沒有另外定義整理序列 ,則使用內置的 BINARY整理序列。
整理順序是做什麼的,什麼是BINARY整理順序?
按照sqlite3 documentation,COLLATE關鍵字在創建sqlite索引時做了什麼?
每個 列名稱後面的COLLATE子句定義用於該 列文本條目的整理 序列。默認的整理序列 是針對 定義的整理序列,即CREATE TABLE 語句中的列。或者如果沒有另外定義整理序列 ,則使用內置的 BINARY整理序列。
整理順序是做什麼的,什麼是BINARY整理順序?
這是sql引擎在內部訂購數據的方式。二進制整理完成它的建議,它進行二進制比較。雖然我從來沒有量化它,但它通常是速度最快的排序規則,因爲它會檢查位模式,這意味着它對大小寫和變音不敏感。
二進制排序規則比較你的字節字節,如在unicode表中。例如:A,B,a,b。 區分大小寫的順序是:a,A,b,B。
二進制整理的優勢在於其速度,因爲字符串比較非常簡單/快速。在一般情況下,使用二進制的索引可能不會產生預期的排序結果,但是對於精確匹配,它們可能很有用。
COLLATE NOCASE也會影響區分大小寫的查詢。
如果你有這些值的列:「AA」,「AA」
select * from table where col = 'aa'
如果你已經創建了COLLATE NOCASE您的列將返回兩個「AA」和「AA」。否則,如果你沒有指定它,它將只返回'aa'。
您還可以在查詢中指定它(這是慢然後如果你已經創建了COLLATE NOCASE你列)
select * from table where col = 'aa' COLLATE NOCASE