我想在包含阿拉伯文本數據的
LONGBLOB
字段上執行搜索。例如,你如何搜索「هذه«الأولوياتالدواوينية»ف」?Mysql在包含阿拉伯文本數據的longblob db字段上搜索表字段的值爲
3313537353B2623313630363B2623313631303B202623313630343B2623313537353B2623313630363B202623313539303B2623313538313B2623313537353B2623313631303B2623313537353B2623313630373B2623313630353B2026
;但是,如果我檢索阿拉伯文本值並顯示在網頁上,則會顯示正確的阿拉伯字符。如果我將字段的數據類型從
LONGBLOB
更改爲LONGTEXT
,它會影響我存儲的阿拉伯語內容文本嗎?我在該表中有近1500條記錄。
回答
瞭解一個字符及其編碼之間的區別是很重要的。例如字符
ن
將以非常不同的字節depending on its encoding存儲。例如,如果使用IBM1097代碼頁編碼,它將由單個字節0xcc
表示,但是如果使用UTF-16編碼,則使用四個字節序列0xfefffee5
。更糟的是,相同字符可以用相同的編碼中的多種方式表示。除非MySQL知道使用了哪種編碼,否則它將無法執行所需排序的文本比較(儘管它可以執行二進制搜索相同的字節序列,但這不適用於您所需的排序規則 —即比較字符串的方式,例如不區分大小寫,或表示相同字符的不同字節序列)。
因此,您必須在執行搜索時將編碼信息提供給MySQL,或讓MySQL從它首次接收數據的那一刻開始跟蹤它(即將數據存儲在字符串類型的列中而不是二進制類型)。
它是很多更通常的(而且我強烈建議你)將文本數據存儲在字符串類型的列中。
LONGTEXT
是一種可能性,但可能會滿足您的需求:它可以存儲高達4GiB的數據!也許TEXT
或VARCHAR
(可以同時容納64KiB)或MEDIUMTEXT
(最高16MiB)更合適?一旦理解爲字符數據,MySQL可以使用其String Comparison Functions或Regular Expressions簡單地搜索文本。例如:
SELECT * FROM mytable WHERE textcolumn LIKE '%هذه «الأولويات الدواوينية» ف%';
這將搜索
mytable
對於其textcolumn
字段包含(根據其整理)指定的字符串內的任何地方的任何記錄。您必須先了解
LONGBLOB
列中存儲的現有數據的編碼(插入/更新數據時使用的任何編碼方式)。然後,您可以將其轉換爲沒有問題的字符串類型的列—,但請注意,如果記錄之間存在差異,則必須根據具體情況管理每條記錄的轉換(但您也可以無論如何,在檢索當前數據時都面臨同樣的問題)。例如,如果數據是使用UTF-8編碼,您可以將列轉換爲
TEXT
如下:ALTER TABLE mytable MODIFY textcolumn TEXT CHARACTER SET utf8;
注意,你必須確保你的connection character set正確配置爲您的客戶,以確保必要的發送/檢索字符串數據時發生轉換。
這裏是什麼,我看到你的兩個選項,可能的解決方案:
保持LONGBLOB:如果您要搜索文本的全部內容,你總是可以做一個MD5總和(或任何其他哈希算法...無論適用於您)在長波和搜索。你也可以索引這個MD5列,這樣你可以做超快速搜索,如果你把它做成longint或其他東西。
這種方法的一個問題是,你必須知道整個文本內容才能找到記錄。一種可能的解決方案是提供與表格中的記錄鏈接的主題令牌以及可以存儲在單獨的表格和搜索中的longblob。然後,您可以從longblob表中返回符合標記的行。一個例子是,如果你有一些關於電影,劇院,評論家和演員的文字,你會爲「電影」,「戲劇」,「評論家」和「演員」創建令牌,將它們存儲在令牌表中包含文章的longblob表條目的外鍵,然後當用戶搜索「電影」和/或「評論」等時,您將返回longblob表中的那一行,因爲它匹配那些特定的標記。這應該仍然讓你快速搜索。
更改爲長文本:如果您轉換爲使用長文本,它會爲您提供更好的搜索功能(但速度較慢),因爲您可以在其中進行搜索。如果是我,我會創建一個新表格,其中包含longtext作爲主字段的類型,並編寫一個腳本,將blob中的阿拉伯數據讀出,然後將其作爲文本寫入新表格。如果你確定你的格式是正確的,它不應該破壞你的數據。我不確定是否僅僅簡單地轉換它就會破壞它...你總是可以做一個測試用例,你用longblob製作一個表格,用一些阿拉伯文字填充它,然後將列轉換成長文本走着瞧吧。
第一個選項的問題是排序規則無法應用:例如,對於不區分大小寫的情況或不同字節序列在相同編碼中表示相同字符的情況......因此我不會推薦這樣做。 – eggyal
- 1. 如何在阿拉伯文字搜索
- 2. 如何搜索包含阿拉伯字符的字符串?
- 3. queryString包含多行阿拉伯文本
- 4. 如何搜索包含unicode /阿拉伯字母的元素?
- 5. php mysql阿拉伯語搜索
- 6. 阿拉伯文本沒有儲存在mysql數據庫中?
- 7. Solr阿拉伯語搜索
- 8. 全文搜索不匹配阿拉伯語Kaaf字母阿拉伯語模式
- 9. 正常化阿拉伯語文本mysql
- 10. 阿拉伯語文本文件搜索和索引
- 11. 阿拉伯語文本框
- 12. 從MySQL數據庫中搜索LongBlob列中的文本
- 13. 阿拉伯文文本框
- 14. Xapian vs Lucene.Net - 阿拉伯文檔文本搜索
- 15. 如何解析包含「阿拉伯語言」文本的JSON?
- 16. 如何在PHP中從數據庫中搜索阿拉伯語?
- 17. mysql數據庫中的阿拉伯文字母
- 18. 將Marathi腳本(非阿拉伯數字)轉換爲阿拉伯數字
- 19. 從Twitter檢索阿拉伯數據
- 20. 如何在sqlite數據庫上使用阿拉伯文字?
- 21. Twitter搜索API阿拉伯查詢
- 22. 從mysql中檢索阿拉伯語文本的問題
- 23. 將阿拉伯文字保存到MySQL數據庫中
- 24. 將阿拉伯文字插入到MySQL數據庫中-PHP
- 25. Parse Json阿拉伯文本
- 26. 保存數據在阿拉伯語中的MySQL數據庫
- 27. Sqlite for windows store不搜索阿拉伯文字
- 28. 閱讀包含阿拉伯文的文件
- 29. Break阿拉伯文字體
- 30. Pdflib6阿拉伯文連字
我做了一個longblob db字段的表,最初更改爲longtext。並使用這個新表。搜索現在提供所需的結果。 – Parag