2016-04-15 114 views
0

XAMPP上的MariaDB存在問題(無論您是在Windows還是Linux上運行)。 我在Windows 10中使用XAMPP和PHP 7(最初我在Xubuntu上使用XAMPP 5.6並且發生同樣的問題)作爲我的站點開發服務器。我將它設置:XAMPP上的UTF-8 X MariaDB

  • 的元標記在所有HTML檔案UTF-8,
  • 的PHP頭函數發送UTF-8的數據,
  • 的PHP指令,當我連接到數據庫(我用庫MySQLi)

  • 
     
        mysqli_set_charset($conexao, "utf-8"); 
     
    setlocale(LC_ALL, 'pt_BR.utf8'); 
     
        
     
    

  • 的default_codin在php.ini文件g的設置好的用於UTF_8,

  • 和所有的數據庫中utf8_general_ci排序規則設置。

我用phpMyAdmin的嵌入XAMPP進入測試數據,在第一次測試是創造在phpMyAdmin自身領域,在第二次測試從一個CSV文件中使用的功能,導出數據(文件已被設置爲UTF -8編碼)。

當我試圖對數據庫進行查詢然後嘗試顯示從該查詢獲得的數據時,會發生什麼情況,重音字符都帶有問號,強制使用函數處理從數據庫中獲取的信息函數utf8_encode。

當時我不打擾它,但是當把我的網站傳輸到生產服務器(而不是XAMPP)時,來自數據庫和使用utf8_encode函數處理的數據顯示(在所有瀏覽器中)以代替那些重音字符只有問號(?)和感嘆號(!)。我不得不接聽電話utf8_encode並解決了問題。

在兩臺服務器提交相同的SQL文件並最終發生這種差異的操作。唯一的區別是生產服務器phpMyAdmin的不接受我的SQL文件的以下標題:

/*!40101 SET @[email protected]@CHARACTER_SET_CLIENT */; 
 
/*!40101 SET @[email protected]@CHARACTER_SET_RESULTS */; 
 
/*!40101 SET @[email protected]@COLLATION_CONNECTION */; 
 
/*!40101 SET NAMES utf8mb4 */

這裏是服務器設置: XAMPP部署服務器:

  • PHP 7.0.4
  • MariaDB的10.1.10
  • phpMyAdmin的4.5.1

生產服務器:

  • PHP 7.0.4
  • phpMyAdmin的3.5.2.2
  • MariaDB的10.0.24

請幫幫我!

此致

路易斯

+1

不要使用'utf8_encode',只有化合物的問題。 'SHOW CREATE TABLE'確保_columns_不會說'latin1'。 –

+0

親愛的@RickJames,我在所有表中使用了'SHOW CREATE TABLE',並且所有varchar列都表示:'namecolumn varchar(255)COLLATE utf8_unicode_ci'。沒有列說'latin1'。 –

回答

1

一個)mysqli_set_charset()可以失敗由於各種原因,因此:添加錯誤處理,例如

if (!mysqli_set_charset($conexao, "utf-8")) { 
    throw new mysqli_sql_exception('changing charset failed'); 
} 

b)用utf8,而不是 再試UTF-8

+0

親愛的@VolkerK諷刺命運,問題已經解決了你的建議,只是追蹤!在XAMPP上放置編碼爲'utf8',修復了奇怪的字符頁面。作爲預防措施,我將按照您的建議使用錯誤處理,以避免生產服務器發生衝突。謝謝! –