2012-02-23 12 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」を取得実行すると、それが切り捨てられた後、それは文字é、すべてを思わ。私はここで何が間違っているのか分かりません。誰かが私が間違ってやっていることを示唆することができれば、非常に感謝するでしょう。ありがとう!

+0

おそらく 'mysql'の代わりに' mysqli'クライアントをPHPに使用していますか? – Treffynnon

+0

毎回1文字ずつ切り捨てるのか、それとも特殊文字まですべてを保存するだけですか? – MetalFrog

+1

あなたのテーブル構造は何ですか? – MMM

答えて

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

+1

いいえ、あなたはその機能を持つñééíóú...のような特殊文字をエンコードする必要があります。私はアルゼンチン出身です(私の母国語はスペイン語です)ので、私はこの問題を解決しました:)例えば、é=éin UTF8。 – Juanma