2013-03-14 133 views
0

我有一個問題,字符á,ó,ó,ú,Ú,í,Í,é,É被存儲在我們的MySQL數據庫中作爲奇怪的字符。我們正在使用PDO插入數據庫。UTF8編碼問題?

奇怪的是,我有我的計算機上的WAMP網站的本地副本,這一切工作正常,並且沒有編碼問題。實時站點位於Linux服務器上,如果這可能會有所作爲。

本地數據庫是活動數據庫的副本,因此所有表中的所有編碼都是相同的。

我試圖設置PDO編碼:

$ PDO =新PDO( 'MySQL的:主機=' 設置:: DBHostName() ';字符集= UTF8; DBNAME =' 設置::數據庫名。 (),Settings :: DBUsername(),Settings :: DBPassword(),array( PDO :: ATTR_ERRMODE => PDO :: ERRMODE_EXCEPTION ));

其他建議?我不明白爲什麼它能在本地工作,而不是在我們的現場?

+1

PDO :: MYSQL_ATTR_INIT_COMMAND =>「SET NAMES utf8」似乎可以解決它。 – 2013-03-14 11:15:55

+0

你想'utf8mb4',毫不遜色,'SET NAMES utf8mb4' [**閱讀所有關於爲什麼這是**的方式](https://stackoverflow.com/questions/279170/utf-8-all-the-方式通) – Martin 2017-07-31 15:32:23

回答

1

對於5.3.6以後的PHP版本,您應該在DSN中設置編碼。
對於所有其他人發出傳統的SET NAMES查詢是唯一的選擇。

0

PDO構造函數調用的最後一個參數是驅動程序特定的選項,它以具有鍵=>值對的數組形式給出。 MySQL驅動程序有一個PDO :: MYSQL_ATTR_INIT_COMMAND選項,您可以在其中指定每次連接到數據庫時執行的命令。您可以使用MySQL特定的查詢SET NAMES utf8作爲init命令的值,告訴MySQL使用UTF-8作爲我們連接的字符集。

$pdo = new PDO('mysql:host=mysql.host.com;dbname=db;array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"', 
'database', 'password');