programing

""", """ 및 페르시아어의 차이점 - Mysql

javaba 2022. 9. 16. 22:06
반응형

""", """ 및 페르시아어의 차이점 - Mysql

통합 mysql 데이터베이스가 있는 UTF-8 페르시아 웹사이트에서 일하고 있습니다.웹 사이트의 모든 콘텐츠는 관리 패널을 통해 가져오며 모두 페르시아어입니다.

아시다시피 아랍어는 페르시아어와 같은 글자를 가지고 있습니다.문제는 아랍어 레이아웃의 키보드로 치려고 하면 ' an'이라고 쓰고 페르시아어 레이아웃의 키보드로 치려고 하면 '"'이라고 치게 된다는 것이다.

그래서 어떤 사람이 '우리'를 검색하면 mysql은 '우리'를 찾을 수 없습니다.

중요사항: 이 속성을 가진 글자는 '''뿐만이 아닙니다.그것들은 많고 매우 비슷합니다.

이 문제를 해결하려면 어떻게 해야 하나요?

단순하고 단순한 솔루션 중 하나는 데이터를 데이터베이스로 Import하기 전에 모든 """을 """로 대체하는 것으로 보이지만, 저는 이보다 더 강력한 솔루션을 찾고 있습니다.

EBAG님, 유니코드에는 아랍어와 페르시아어를 모두 포함한 아랍어 블록이 하나 있습니다.

06CC는 페르시아어입니다.ی064A는 아랍어입니다.ي

기본 창 키보드기본 Windows키보드 사용을 사용한다.code page 1256는아랍 문자에는을 아라비아 문자.064A로 기본 디폴트로서ي그리고 아랍bothPersian 사용자들에게 있기 때문에 아랍 사용자들은 훨씬 페르시안보다 많죠.아랍 사용자는 페르시아인보다 훨씬 더 많기 때문에 페르시아인과 아랍인 사용자 모두에게 적합합니다.

ISIRI표준 키보드를 만들단 표준 자판 만드ISIRI 9147그리고 아랍어랑 페르시아어랑 아랍어와 페르시아.Yeh지만 Perisan 하지만 페리산에ی이 의 기본 캐릭터다.A기본 문자입니다.표준 키보드를 사용하고 있페르시아 사용자 표준 키보드를 사용하는 페르시아 사용자는 표준 페르시아어를 사용합니다(및 사용)표준 페르시아를 넣을 것이다.ی‍ while the rest of them use arabicي`.」.

우리가 이에 데이터를 저장한 데로 당신은 보통에게 우리가 당신이 보통 말한 것처럼 우리는 데이터를 데이터베이스에 저장하는 동안 아랍어를 변경합니다 아라비아를 바꾼다.ي페르시아 페르시아어로에‍ی거기서 읽을 때는 페르시아어로 읽으니까 모든 게 사실이에요

두 번째 접근법은 웹 어플리케이션에서 사용자 입력을 제어하기 위해 자바스크립트 파일을 사용하는 것이다. 대부분의 페르시아 웹사이트는 데이터베이스에 문자를 저장하기 위해 이 접근 방식을 사용한다.이 방법에서는 페르시아어 또는 아랍어 키보드용 키보드 레이아웃을 설치할 필요가 없습니다.English에 리 and and andJavaScript파일 개발자는 어떤 문자가 자신과 동일한지 확인합니다.여기서 찾을 수 있습니다.ISIRI 9147 javascriptGUID를 사용하다

세 번째 접근법은 사용자 인터페이스와 함께 이전과 동일하게 작동하며 페르시아어 키보드에 익숙하지 않은 사용자에게 좋은 온스크린 키보드를 사용하는 것입니다.

네 번째 방법은 양쪽 사투리를 검색하는 것입니다.설치할 때 알 수 있듯이MySql또는SQL Server를 설정할 수 있습니다.또, 사투리(및 대소문자의 구별)를 서포트하는 옵션도 있습니다.만약 당신이 아랍어 조합과 사투리를 사용할 수 있다면 당신은 그들 둘 다에 대한 결과를 얻을 수 있고 보통 이것은 잘 작동합니다.sql server테스트하지 않습니다.MySql이것이 최고의 해결책입니다.

하지만 내가 너라면, 난 간단한 방법을 실행해sql function얻을 수 있다nvarchar및 반환nvarchar그럼 데이터를 쓰고 싶을 때 전화하고, 읽고 싶을 때 언제든지 표준으로 하면 돼요.

Sorry for the long tail.

update TABLENAME set COLUMNNAME=REPLACE(COLUMNNAME,NCHAR(1610),NCHAR(1740))

or

update TABLENAME set COLUMNNAME=REPLACE(COLUMNNAME,'ي',N'ی')

This is called a collation. It's what MySQL uses to compare two different characters. I'm afraid I don't know anything about persian or arabic, but the concept is the same. Essentially you've got two characters which map to the same base value. You need to find a collation which maps ي to ی. I'm afraid that's as helpful as I can be without knowing more about the language.

The first letter (ي) is Yāʾ in the arabic alphabet. The second letter (ی) is ye in the perso-arabic alphabet.

More on the perso-arabic alphabet here: http://en.wikipedia.org/wiki/Perso-Arabic_alphabet

"Two dots are removed in the final ye (ی). Arabic differentiates the final yāʾ with the two dots and the alif maqsura (except in Egyptian Arabic), which is written like a final yāʾ without two dots.

Because Persian drops the two dots in the final ye, the alif maqsura cannot be differentiated from the normal final ye. For example, the name Musâ (Moses) is written موسی. In the final letter in Musâ, Persian does not differentiate between ye or an alif maqsura."

Seems to be an interesting problem...

I was struggling with the similar situation 5-6 years ago, when Lucene was not an option for MySQL and there were no Sphinx (Never tried Sphinx result on this), but what I did was I found pretty much most of the possible alternations and put them in an array in PHP. So if the input keyword contained any of those characters, I generated all the possible alternates of that.

So for the input of 'بازی' I would have generated {'بازي' , 'بازی' } and then I would query the MySQL for both, like the simplest query below :

SELECT title,Describtion FROM Games WHERE Description LIKE '%بازي%' OR Description LIKE '%بازی%' 

하지만 대안들의 주요 목록은 그리 길지 않다.

DB 엔진을 전환할 수 있는 경우 Postgre의 전체 텍스트 검색 기능을 살펴보는 것이 좋습니다.SQL:

http://www.postgresql.org/docs/9.0/static/textsearch.html

특히 강조되지 않은 문자를 색인/검색하도록 구성할 수 있으며, 모든 종류의 추가 사전(정지 단어, 동의어 등)을 정의할 수 있습니다.

그렇지 않은 경우 대신 Sphinx 또는 Lucene을 사용하는 것이 좋습니다.like검색을 위한 문.

이 주제에 대한 답변은 매우 오래되었기 때문에 무덤에서 시체를 파내는 것과 같다는 것을 알지만, IMHO의 경험을 공유하고 싶습니다. 가장 좋은 방법은 당신의 요청을 포장하고 당신의 대체품을 적용하는 것입니다. 다른 방법보다 휴대성이 좋습니다.여기 자바 샘플이 있습니다.

public class FarsiRequestWrapper extends HttpServletRequestWrapper{

@Override
public String getParameter(String name) {
    String parameterValue = super.getParameter(name);
    parameterValue.replace("ی", "ي");       
    parameterValue.replace("\\s+", " ");
    parameterValue.replace("ک","ک");
    return parameter.trim();
}

}

필터 서블릿만 설정하면 됩니다.

public class FarsiFilter implements Filter{

public void doFilter(ServletRequest request, ServletResponse response,
        FilterChain chain) throws IOException, ServletException {

    HttpServletRequest req = (HttpServletRequest) request;
    FarsiRequestWrapper rw = new FarsiRequestWrapper(req);
    chain.doFilter(rw, response);
}

} 이 접근방식은 Java에서만 사용 가능하지만 더 단순하고 우수하다는 것을 알게 되었습니다.

영어가 아닌 문자 앞에 N(uNicode를 의미)을 사용해야 합니다.다음은 예를 제시하겠습니다.

REPLACE(COLUMNNAME, N'ي', N'ی')

언급URL : https://stackoverflow.com/questions/5616063/characters-%d9%8a-and-%db%8c-and-the-difference-in-persian-mysql

반응형