이 글에서는 주로 ACCESS의 ASP 퍼지 쿼리 메모리 오버플로에 대한 해결 방법을 소개합니다. 이 문제의 원인은 문자 인코딩 문제로, 트랜스코딩 기능을 사용하여 해결하는 방법은 다음을 참조하세요.
오늘 저는 한 웹사이트의 일일 유지 관리를 하던 중 해당 웹사이트의 메시지 프로그램이 엄격한 검증과 필터링을 거치지 않아 거의 100,000개에 가까운 정크 데이터가 생성된 것을 발견했습니다. 여기에는 중요한 정보가 많이 포함되어 있으므로 데이터를 정리하고 더욱 엄격한 검증 조치를 추가해야 합니다.
그러나 데이터베이스에서 직접 삭제하는 것은 비과학적이며, 실수로 중요한 정보가 많이 삭제될 수 있습니다.
퍼지 쿼리문을 통해:
다음과 같이 코드 코드를 복사합니다.
'%http%'와 같은 의견이 있는 피드백에서 *를 선택하세요.
결과: "메모리 부족"
끊임없는 검색 끝에 문제의 주요 원인이 발견되었습니다.
ASP에서 LIKE 키워드를 사용하여 일본어 기호를 쿼리하면 Chr(-23075)과 같은 오류가 발생하여 메모리 오버플로를 나타냅니다.
데이터 테이블의 데이터에 일본어 또는 일부 비간체 중국어 문자가 포함되어 있으면 메모리 오버플로 오류도 발생합니다.
위의 문제는 마이크로소프트 파워캠프에서 마이크로소프트 엔지니어들에 의해 확인되었으며, 해결할 수 없는 제품 BUG라고 온라인상에서는 전해지고 있습니다. 유일한 방법은 전체 데이터베이스 데이터를 ANSI 텍스트 형식으로 인코딩한 다음 저장하는 것입니다. 표시되면 다시 디코드하세요.
해결 방법은 없습니다. 위에서 언급한 대로 필드를 변환하여 다른 새 필드에 저장한 다음 정리 작업을 수행하는 것뿐입니다. 이런 과도한 데이터를 마주하는 것은 정말 어렵습니다.
EncodeString 함수는 문자 이스케이프를 수행합니다.
다음과 같이 코드 코드를 복사합니다.
함수 EncodeString(strWords)
내가 오랫동안 어둡게
희미한 strEncodeWords
i = 1에서 Len(strWords)까지
strEncodeWords = strEncodeWords & CStr(Asc(Mid(strWords, i, 1))) & ","
다음
EncodeString = strEncodeWords
기능 종료
이런 식으로 탈출한 후, 퍼지 검색 중에 키워드를 탈출하세요.
다음과 같이 코드 코드를 복사합니다.
Comments_new가 '%&EncodeString("http")&%'와 같은 피드백에서 *를 삭제합니다.