2015-07-10 113 views
2

我有PHP 5.5.9和MySQL 5.5.43 Innodb。這是在Kubuntu LTS /etc/mysql/my.cnfmysql將默認字符集latin1改爲utf8

printf(「當前字符集:%s \ n」,mysqli_character_set_name($ conn));

當前字符集:latin1的

我已經試過

默認字符集= UTF8

第一,但後來我的MySQL服務器沒有重新啓動

然後我有試過

character-set-server = utf8

然後我的mysql外殼沒有啓動

我該如何解決這個問題?我已經使用 init_connect ='SET NAMES utf8' 解決了非root用戶的問題,但charset保持不變(它只顯示爲非特權用戶UTF8,它仍然是Latin1)。

如果(一個大的if)smnd可以告訴我我應該在哪裏使用utf8mb4?還在my.cnf文件中?我有我的表在UTF8和已遷移那些與我正在努力utf8mb4 ...

另一個問:是適用於Linux(Kubuntu的)服務器: https://www.youtube.com/watch?v=3M1Wpw4uOoM

請幫幫我,謝謝,格雷戈爾來自lilaum.com

回答

0

mysqli_set_charset('utf8')

init_connect對於root連接將被忽略。

utf8mb4實際上是utf8的超集。它需要中文和新的表情符號,再加上一些晦澀難懂的字符集。

+0

是否有可能一勞永逸地做到這一點? – user1081168

+0

和utf8mb4是真正的utf8 ...我以爲我必須改變它在mysql中,因爲我以前添加到php.ini default_charset =「UTF-8」 但它沒有工作。請更新我,如果(我相信如此)可以改變這個指令一次和所有服務器全球,謝謝... – user1081168

+0

全球...在'my.cnf',這_might_建立utf8mb4爲_future_行動:'character_set_server = utf8mb4 '如果你有現有的數據;這需要以其他方式處理。 –

2

PHP manual說:

MySQLnd總是假定服務器默認字符集。這個字符集在連接握手/認證期間發送,這是mysqlnd將使用的。

MySQLnd是PHP 5.4及更高版本中包含的MySQL本地驅動程序。

不幸的是,我儘管已經帶有以下各項配置/etc/mysql/my.cnf確認,即使在我的系統(PHP 5.6.17和MySQL 47年5月5日在Debian 8.3傑西)

[mysqld] 
character-set-server=utf8 

[mysql] 
default-character-set=utf8 

mysqlnd似乎並不假設服務器默認字符集(utf8),但將連接字符集設置爲latin1 with collat​​e latin1_swedish(可能是考慮MySQL AB是瑞典公司的默認值)。

因此,從PHP應用程序連接時似乎沒有永久的方式來設置字符集。您必須致電

$mysqli->set_charset("utf8") 

每次連接後。這可以嵌入到自定義的「dbconnect」PHP函數中,以提供一種抽象層。