2011-07-27 11 views
0

這是我在PHP做:爲什麼我用PDO插入非英文字符會變成怪物?

$dbhandler = new PDO('mysql:host='.domain.':'.port.';dbname='.dbName.';',db_user,db_password);   

$stmt = $dbhandler->prepare("INSERT INTO ".myTable. 
" (value) VALUES (:value)"); 
$stmt->bindValue(':value', "試打中文"); 

$stmt->execute(); 

這是我通過phpMyAdmin的獲得:

試æ‰「中文 

但我可以手動在phpMyAdmin插入中國,它顯示怪物字符... 我做錯了什麼? (表格字段的排序是:utf8_unicode_ci)。

謝謝。

+0

所以你的假設phpMyAdmin是正確顯示插入的數據,使用適當的字符集?恐怕你錯了,你應該永遠拋棄PHPMyAdmin ..這是處理MySQL最糟糕的事情之一。基本上,你沒有做錯任何事。如果您使用正確的編碼(utf8)將記錄輸出到您的網頁,您應該看到「怪物字符」,因爲您稱它爲好。 –

回答

2

你的代碼更改爲:

$dbhandler = new PDO('mysql:host='.domain.':'.port.';dbname='.dbName.';',db_user,db_password, array(
    PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8' 
)); 
+0

coool,它的工作,但這是什麼MYSQL_ATTR_INIT_COMMAND呢? – Tattat

+0

從[pdo手冊](http://php.net/manual/ref.pdo-mysql.php):*連接到MySQL服務器時執行的命令。重新連接時會自動重新執行。 注意,這個常量只能在構造一個新的數據庫句柄的時候在driver_options數組中使用。*並且從mysql中獲得[SET NAMES utf8](http://dev.mysql.com/doc/refman/5.0/en/字符集,connection.html) – Yoshi

0

嘗試同時運行:

SET NAMES utf8; 
SET CHARACTER_SET utf8; 

當你以後做查詢數據庫連接。

相關問題