2014-10-10 108 views
0

我有一個MySQL表,我設置爲使用的編碼utf8_swedish_ci。兩個示例值是2 Kung1 Krön - 注意瑞典字符。我需要從PHP腳本中搜索這些國際化的字符串。我的PHP文件編碼在UTF-8。我的代碼,錯誤處理剝離的清晰,看起來是這樣的:編碼問題與庫MySQLi

$db = new mysqli($host, $user, $password, $user); 
$db->set_charset('UTF-8'); 
$stm = $db->prepare('SELECT `id` FROM `myTable` WHERE `bok` LIKE ?'); 
echo "Searching on $value'..."; 
$stm->bind_param('s', $value); 
$stm->execute(); 
$stm->bind_result($result); 
$stm->close(); 
echo "Fetched '$result'."; 

現在,如果我$值設置爲第一個例子中的值,我得到了一個匹配的行。使用另一個示例值,我不會獲得行。我已經測試了查詢在PHPMyAdmin中的工作。我認爲錯誤在於國際角色,因此我在某個地方搞亂了編碼。那麼我做錯了什麼,我該如何解決這個問題?

編輯:行$db->set_charset('UTF-8');失敗,因爲我使用了不正確的字符集。它應該是utf8。原來我的錯誤處理太少了,我應該在set_charset之後檢查$db->error

+0

你在哪裏錯了:在創建表的時候沒有指定編碼,因此它使用的默認。如何解決它:[將編碼更改爲一致。](http://stackoverflow.com/questions/6115612/how-to-convert-an-entire-mysql-database-characterset-and-collat​​ion-to-utf -8) – Sammitch 2014-10-10 19:25:53

+0

@Sammitch你爲什麼認爲他沒有指定編碼? @David嘗試設置名稱並在列名和表名中使用反引號,因爲如果您在某些情況下不會導致問題。你還檢查'$價值'是否正確? – 2014-10-10 19:32:23

+0

@Sammitch我確實指定了表格的編碼。 @LaciK我實際上使用反引號,當我將這個示例拉到一起時,將它們移除。我使用了'echo $ value',所以我相信它具有正確的價值。 – David 2014-10-10 20:03:18

回答

1
$db->set_charset('UTF-8'); 

注意,MySQL是特別的名字,它使用內部的UTF-8字符集是utf8(不含破折號),而不是常規的UTF-8

如有疑問,請參閱SHOW CHARACTER SET;

-1

試試這個,它可能會有所幫助。

$db = new mysqli($host, $user, $password, $user); 
$db->set_charset('UTF-8'); 
$stm = $db->prepare('SELECT `id` FROM `myTable` WHERE `bok` LIKE ?'); 
$value = '%'.$value.'%'; //added this line 
$stm->bind_param('s', $value); 
$stm->execute(); 
$stm->bind_result($result); 
$stm->close(); 
echo "Fetched '$result'."; 

我試圖LIKE '' 用UTF-8字符的一個字符(180)柱,用utf8_general_ci編碼,所以我與LIKE%嘗試過它返回0行 '' %,而工作

+0

但我沒有使用utf8_general_ci,我正在使用utf8_swedish_ci。我嘗試了你的建議,但沒有任何區別。 – David 2014-10-11 11:33:45