2012-02-23 65 views
3

我在將具有特殊字符的單詞插入到我的數據庫時遇到問題。這個詞似乎在特殊字符處被截斷。正在截斷PHP/Mysql特殊字符插入

我使用MySQL 5.1.41,我的數據庫的排序規則是utf8_general_ci。我正在使用PDO來促進數據庫交互。

這是我正在做的一個例子。

//$db is a PDO object 
$db->setAttribute(PDO::MYSQL_ATTR_INIT_COMMAND, "SET NAMES 'utf8'"); 
//word with a special character 
$word = "pépite"; 
$sql = "INSERT INTO keyword(key_name) VALUES(?)"; 
$stmt = $db->prepare($sql); 
$stmt->execute(array($word)); 

當這個執行我只是得到「P」在我的數據庫,它似乎字符E,一切都將被截斷之後。我不確定我在這裏做錯了什麼。如果有人可以建議我做錯了,那將非常感激。謝謝!

+0

你可能使用'mysqli'客戶端而不是'mysql'嗎? – Treffynnon 2012-02-23 12:51:33

+0

每次只是在一個角色上剪掉它,還是將所有內容都存儲到特殊字符中? – MetalFrog 2012-02-23 12:51:59

+1

什麼是你的表格結構? – MMM 2012-02-23 12:54:45

回答

7

試試這個

$db->setAttribute(PDO::MYSQL_ATTR_INIT_COMMAND, "SET NAMES 'utf8'"); 
$word = utf8_encode('pépite'); 
$sql = "INSERT INTO keyword(key_name) VALUES(?)"; 
$stmt = $db->prepare($sql); 
$stmt->execute(array($word)); 

utf8_encode | utf8_decode

+0

是的,這非常感謝。你能告訴我爲什麼我需要編碼爲utf8,不是字符串已經是utf8嗎? – TheMethod 2012-02-23 13:08:19

+1

不,你必須編碼像ñáéíóú這樣的特殊字符。我來自阿根廷(我的母語是西班牙語),所以我總是遇到這個問題:)例如UTF8中的é=é。 – Juanma 2012-02-23 13:14:22