我的數據庫使用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_connection
爲utf8_general_ci
價值;其他歸類變量設置爲utf8_czech_ci
。當運行在Adminer這個命令,我看到utf8_czech_ci
在collation_connection
只有當我經過任何的SET NAMES
或SET 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中提出了要求。與我的懷疑不同,最初接受的答案至少在大多數情況下是有效的,所以我再次接受。
它拋出一個錯誤,所以我找到了適當的解決方案[這裏](http://stackoverflow.com/a/13101585/1801588),測試它的工作原理,並編輯你的代碼。無論如何,你的回答引導我去解決方案,所以+1和接受。 –
是的,我忘了=標誌。現在它可以工作。你應該只使用適當的命令,而不是一些查詢難以理解其含義的垃圾郵件,如其他答案中所示。 –
這個答案似乎不再有效。看到我的問題編輯。 –