如何在日期時間列上進行全文搜尋?
我創建的是一個
DATETIME
列。我還嘗試將該表的所有排序規則更改為相同的 utf8 類型,但它不會堅持。是否可以對 DATETIME 列進行 FULLTEXT 搜尋?(%like% 太慢了)。我得到的錯誤是:
1283 - 列 ‘created’ 不能是 FULLTEXT 索引的一部分
- 編輯:
$add_24 = $i + 1440; $format_second = date("Y-m-d H:i", strtotime('-'.$add_24.' minutes')); $p_price = mysqli_fetch_array(mysqli_query($con, "SELECT created FROM products WHERE created LIKE '$format_second%'"));
FULLTEXT
僅適用於字元串數據類型,例如VARCHAR
和TEXT
。畢竟,它是在尋找“詞”。表的字元集/排序規則只是新添加列的預設值。
您可以
ALTER TABLE ... CONVERT TO ...
更改表中的所有列。但在這樣做之前,請告訴我們您這樣做的原因以及表格中是否已經存在非英文文本。使用它ALTER
可能只會讓事情變得更糟。什麼,特別是,你在尋找
DATETIME
什麼?可以更改為可以使用索引有效執行的“範圍*”查詢。*讓我們看看嘗試的查詢和SHOW CREATE TABLE
.更多的
WHERE created = '2018-01-11 20:49:01'
將檢查特定的秒
要麼
WHERE created >= '2018-01-11' AND created < '2018-01-11' + INTERVAL 1 DAY
created
將在特定日期檢查任何內容。等等。
這些範例中的任何一個都可以使用
INDEX
(非FULLTEXT
)包含created
. 我說“可能”是因為可能還有其他問題。請提供SELECT
和SHOW CREATE TABLE
。(API,例如
mysqli
,與問題無關。)還有更多
看著這個配方…
SELECT symbol,created FROM products WHERE symbol='".$ccc['symbol']."' AND created LIKE '%".$date_format."%' ORDER BY id DESC limit 0,48
我認為這
INDEX(symbol)
可能會有所幫助,但與此無關created
。這是因為 , 上的前導萬用字元LIKE
,並且因為索引不會與DATETIME
and一起使用LIKE
。通過索引獲得性能的方法如上所述(使用範圍)。
不要
DATETIME
作為字元串進行比較。首先 Rick James,答案是正確的,應該被接受。您在 MySQL 中有 3 個類型類別,基本上,您可以在此處查看它們。(也許在未來的某個時候,你會擁有一個真正的 JSON 類型。)
- 數字
- 約會時間
- 細繩
每一個都有類型。這些類型中的每一種都有自己的一組運算符和函式。**您應該始終使用該類型的運算符和函式。**不要將
DATETIME
, 視為字元串。將其視為預設字元串化的對象。對於您的案例,