2012-09-21 51 views
1

我在使用utf8編碼在數據庫上運行查詢時遇到了一些麻煩。 一切工作正常,直到我嘗試使用特殊字符的字符串。 因爲我將一些單獨的頁面添加到現有的prestashop模板,所以我無法對數據庫進行很多更改。關於utf8_general_ci排序規則的mysql_query

這是我的代碼(抱歉,但它的一些是羅馬尼亞語)

$acces_server=mysql_connect($db_host, $db_user, $db_pass); 
    if(!$acces_server) die ("Server-ul nu este disponibil momentan !"); 
    mysql_set_charset('utf8'); 
    echo mysql_client_encoding(); 

$acces_bd = mysql_select_db($db_name); 
    if (!$acces_bd) die ("Ne pare rau, dar baza de date nu poate fi accesata momentan !"); 
mysql_query('SET NAMES utf8') or die(mysql_error()); 
mysql_query('SET CHARACTER SET utf8') or die(mysql_error()); 
mysql_query('SET COLLATION_CONNECTION="utf8_general_ci" ') or die(mysql_error()); 

如果我儘量讓這樣的查詢,我得到0行:

$experienta= $_GET['name']; 
$rez=mysql_query("SELECT nume_cutie FROM rez_experiente WHERE nume = '".$experienta."'"); 

我已經使用回顯來顯示查詢,然後在phpMyAdmin中輸入它,它工作。 另外,頭部有這樣一行:

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 

我真的不知道自己還能做些什麼,到目前爲止,我已經找到了所有解決方案似乎並不管用。我甚至嘗試使用mysqli來代替,結果是一樣的。 請幫助我,並感謝您的時間。

*編輯 我試過使用stmt->使用mysqli進行準備,但沒有奏效。 我也試着這樣做:

$experienta2=str_replace("?","%",utf8_decode($experienta)); 
     $rez=mysql_query("SELECT nume_cutie FROM rez_experiente WHERE nume LIKE '".$experienta2."'"); 

至極變成這樣:

SELECT nume_cutie FROM rez_experiente WHERE nume LIKE '5th Avenue Beauty Center - Răsfăţ' 

進入這個:

SELECT nume_cutie FROM rez_experiente WHERE nume LIKE '5th Avenue Beauty Center - R%sf%%' 

並再次查詢在phpMyAdmin,但請求mysql_query(工作)沒有返回 我切換到utf8_unicode_ci,沒有任何改變。

+1

你熟悉[鮑比表]的故事(http://bobby-tables.com/)? – DCoder

+0

它是否失敗了任何名稱或只有當名稱包含非ascii字符?你嘗試過utf8_unicode_ci排序規則嗎? –

+0

只有在涉及非Ascii字符時纔會失敗。 – user1689207

回答

0

數據庫連接後,運行這些查詢:

SET character_set_client=utf8; 
SET character_set_connection=utf8; 
SET character_set_database=utf8; 
SET character_set_results=utf8; 
SET character_set_server=utf8; 
+0

什麼都沒有。我應該將它添加到以前的查詢列表中還是替換它們?因爲我試了兩個,結果是一樣的 – user1689207

+0

你可以給你現有的查詢,這很好。不過,它們不應該是必需的。然後你的表可能會有錯誤的編碼集。使用以下輸出編輯您的問題:在MySQL CLI上使用'SHOW CREATE TABLE someTable;'在Bash CLI上使用'locale'。 – dotancohen

相關問題