這篇文章主要介紹了ASP在ACCESS中模糊查詢內存溢出的解決方法,本文導致這個問題的原因是字符編碼問題,使用了一個轉碼函數解決,需要的朋友可以參考下
今天在日常維護一個網站時,發現該網站的留言程序沒有經過嚴格的驗證過濾,導致了將近十萬個垃圾資料。而其中又不乏重要訊息,需要清理數據,以及增加更嚴格的驗證措施。
而透過在資料庫中直接刪除又不太科學,會誤刪許多重要資訊。
透過模糊查詢語句:
複製代碼代碼如下:
select * from Feedback where Comments like '%http%'
結果:“記憶體溢位”
經過不斷的搜索,找出了問題的主要原因:
asp 中用LIKE 關鍵字查詢日文符號就會出錯,比如說Chr(-23075),提示記憶體溢位。
如果資料表中的資料包含日文或一些特殊非簡體漢字符號,也會出現記憶體溢出的錯誤。
而網路上說,上述問題已經得到微軟動力營的微軟工程師確認,為產品的BUG,無法解決。唯一的方法就是將整個資料庫中的資料編碼為ANSI 文字格式,然後儲存。顯示的時候再DECODE。
無解,只有按上面所說,進行字段轉換保存到另外一個新字段中,然後再進行清理操作。面對這個超標數據真是困難。
EncodeString 函數進行字元轉義
複製代碼代碼如下:
Function EncodeString(strWords)
Dim i As Long
Dim strEncodeWords
For i = 1 To Len(strWords)
strEncodeWords = strEncodeWords & CStr(Asc(Mid(strWords, i, 1))) & ","
Next
EncodeString = strEncodeWords
End Function
這樣經過轉義後,在模糊搜尋時,將關鍵字轉義一下
複製代碼代碼如下:
delete * from Feedback where Comments_new like '%&EncodeString("http")&%'