RandomSeed के सुझाव "FULLTEXT and Asian Languages with MySQL 5.0" द्वारा समस्या को हल करने का प्रयास किया। लेकिन समस्या यह है कि जब तक आप "ft_min_word_len" को 2 पर सेट नहीं करते, तब तक आप 2 वर्णों की खोज नहीं कर सकते। फिर से, $1/माह की वेब होस्टिंग सेवा आपको ऐसा करने की अनुमति नहीं देती है।
ठीक है, वर्कअराउंड समाधान निकालने के लिए 1 रात बिताई। अवधारणा यूटीएफ -8 स्ट्रिंग के सभी गैर-वर्णमाला वर्णों को कुछ अद्वितीय कोड में परिवर्तित करना है।
यहाँ जादू समारोह है। CSDN फोरम से उधार लिया और कुछ बदलाव किए।
function UTF2UCS($str, $s) {
$str = strtolower($str);
$char = 'UTF-8';
$arr = array();
$out = "";
$c = mb_strlen($str,$char);
$t = false;
for($i =0;$i<$c;$i++){
$arr[]=mb_substr($str,$i,1,$char);
}
foreach($arr as $i=>$v){
if(preg_match('/\w/i',$v,$match)){
$out .= $v;
$t = true;
}else{
if($t) $out .= " ";
if(isset($s) && $s) $out .= "+";
$out .= bin2hex(iconv("UTF-8","UCS-2",$v))." ";
$t = false;
}
}
return $out;
}
. का परिणाम
echo UTF2UCS("測試haha")
"6e2c 8a66 haha" होगा
मान लें कि आपके पास "song_name" नामक फ़ील्ड है। आपको बस सभी गानों के नामों को UTF2UCS फ़ंक्शन द्वारा कनवर्ट करने की आवश्यकता है, फिर उन एन्क्रिप्टेड स्ट्रिंग्स को एक पूर्ण टेक्स्ट इंडेक्स फ़ील्ड में सहेजें जैसे कि "song_name_ucs"।
अगली बार जब आपको कुछ खोजने की आवश्यकता हो, तो आपको बस इतना करना होगा:
$temp_string = UTF2UCS('測試', true);
SELECT * FROM song WHERE MATCH (song_name_ucs) AGAINST ('$temp_string')
जब आपको खोज परिणाम में '測' और '試' दोनों की आवश्यकता हो, तो UTF2UCS के दूसरे पैरामीटर में एक ट्रू डालना याद रखें।
यह सबसे अच्छा समाधान नहीं हो सकता है, लेकिन इसके लिए किसी प्लगइन या सिस्टम में बदलाव की आवश्यकता नहीं है। शुद्ध PHP कोड।