2013-12-17 76 views
2

我的數據庫使用utf8_czech_ci排序規則,我也想將其設置爲我的數據庫連接。 Mysqli_set_charset不會讓我設置整理,如果我不想要默認的,utf8_general_ci。首先建議使用Here通過mysqli_set_charset設置charset,然後通過SET NAMES設置歸類。所以我做到了,連接整理仍然是utf8_general_ci。如何使用mysqli設置排序規則?

編輯:現在我基本上使用的代碼YourCommonSense建議:

$spojeni=mysqli_connect('mysql01','username','password', 'my_database'); 
    if (!$spojeni) die('Nepodařilo se připojit k databázi.'); 
    mysqli_set_charset($spojeni,'utf8'); 
    mysqli_query($spojeni, "SET COLLATION_CONNECTION = 'utf8_czech_ci';"); 

不過,我只是面對Illegal mix of collations錯誤。在通過mysqli_get_charset()測試我的連接歸類時,我發現我的歸類是「utf8_general_ci」,而不是「utf8_czech_ci」,因爲它應該是。這意味着最初接受的答案因某種神祕原因而停止工作。我在localhost和託管服務器上測試了它,甚至在聲明瞭數據庫之後,所以偶爾改變排序規則的錯誤似乎是不可能的。

那麼如何通過其他方式更改排序規則?

我以前的代碼,用於存檔的原因:

$spojeni=mysqli_connect('mysql01','username','password'); 
    if (!$spojeni) die('Nepodařilo se připojit k databázi.'); 
    mysqli_query($spojeni, "USE my_database"); 
    mysqli_set_charset($spojeni,'utf8'); 
    mysqli_query($spojeni, "SET NAMES 'utf8' COLLATE 'utf8_czech_ci';"); 

EDIT2:show variables like "%collation%";顯示collation_connectionutf8_general_ci價值;其他歸類變量設置爲utf8_czech_ci。當運行在Adminer這個命令,我看到utf8_czech_cicollation_connection只有當我經過任何的SET NAMESSET COLLATION_CONNECTION(見上文確切的語法我的代碼的最後幾行)運行它。當我從PHP代碼運行show variables(通過mysqli_query),它被示爲utf8_czech_ci,但比較從一個表,並通過所述客戶端設定的值中選出的值仍抱怨illegal mix of collations

詳細細節我related question

EDIT3:我發現a good workaround for the errors。我仍然不明白爲什麼Adminer和Mysqli查詢中顯示的變量之間存在差異,但我已經在follow-up question中提出了要求。與我的懷疑不同,最初接受的答案至少在大多數情況下是有效的,所以我再次接受。

回答

4
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT); 
$mysqli=mysqli_connect('mysql01','username','password', 'my_database'); 
mysqli->set_charset('utf8'); 
mysqli->query("SET collation_connection = utf8_czech_ci"); 
+0

它拋出一個錯誤,所以我找到了適當的解決方案[這裏](http://stackoverflow.com/a/13101585/1801588),測試它的工作原理,並編輯你的代碼。無論如何,你的回答引導我去解決方案,所以+1和接受。 –

+0

是的,我忘了=標誌。現在它可以工作。你應該只使用適當的命令,而不是一些查詢難以理解其含義的垃圾郵件,如其他答案中所示。 –

+0

這個答案似乎不再有效。看到我的問題編輯。 –

0

我不認爲你可以指定爲連接特定的排序規則。它也沒有意義。無論您選擇哪種排序方式,通過連接的角色總是相同的。整理進入服務器端的東西像匹配,排序等

所以,你應該與utf8良好的效果。

+0

http://dev.mysql.com/doc/refman/5.1/en/charset-connection.html「collat​​ion_connection對於字符串的比較非常重要,對於列值的字符串比較,collat​​ion_connection是不起作用問題「 – Andrew