Mysql

如何在日期時間列上進行全文搜尋?

  • January 17, 2018

我創建的是一個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僅適用於字元串數據類型,例如VARCHARTEXT。畢竟,它是在尋找“詞”。

表的字元集/排序規則只是新添加列的預設值

您可以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. 我說“可能”是因為可能還有其他問題。請提供SELECTSHOW 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並且因為索引不會與DATETIMEand一起使用LIKE。通過索引獲得性能的方法如上所述(使用範圍)。

不要DATETIME作為字元串進行比較。

首先 Rick James,答案是正確的,應該被接受。您在 MySQL 中有 3 個類型類別,基本上,您可以在此處查看它們。(也許在未來的某個時候,你會擁有一個真正的 JSON 類型。)

  • 數字
  • 約會時間
  • 細繩

每一個都有類型。這些類型中的每一種都有自己的一組運算符和函式。**您應該始終使用該類型的運算符和函式。**不要將DATETIME, 視為字元串。將其視為預設字元串化的對象。對於您的案例,

引用自:https://dba.stackexchange.com/questions/195309