我試圖將一個字表保存到我的數據庫。 Wordlist是一個utf-8編碼的文本文檔。這是我的桌子結構;mysql字符編碼與土耳其文
CREATE TABLE IF NOT EXISTS `wordlist` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`kelime` char(64) COLLATE utf8_turkish_ci NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `kelime` (`kelime`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_turkish_ci AUTO_INCREMENT=1140209 ;
這裏是添加單詞的php代碼;
<?php
ini_set('max_execution_time', 3000);
$handle = @fopen("wordlist.txt", "r");
if ($handle) {
include("ekle.php"); // makes db connection
$sql = "insert into wordlist (kelime) VALUES (?)";
$dbh->beginTransaction();
$sth = $dbh->prepare($sql);
while (($buffer = fgets($handle, 4096)) !== false) {
$sth->execute(array(trim($buffer)));
}
if (!feof($handle)) {
echo "Error: unexpected fgets() fail\n";
$dbh->rollBack();
} else {
$dbh->commit();
}
fclose($handle);
}?>
我的數據庫的默認排序規則也是utf-8_turkish_ci。當我添加單詞時,我的單詞列表在phpmyadmin上看起來不正確;
我在這裏做錯了什麼?
嘗試將所有內容放入utf8(數據庫,連接到db)。看到這[鏈接](http://stackoverflow.com/questions/14083847/accented-characters-in-utf-8-mysql-table-output/14083925#14083925)。 – Vucko
你從來沒有告訴php/pdo,mysql的連接應該是utf-8,所以它可能默認爲iso8859-1或其他東西,並且破壞了你的文本。整個管道必須是utf8才能完成這種工作。瀏覽器<-> php <-> mysql。如果任何一個單獨的階段都是不同的字符集,而沒有適當的字符集翻譯例程,則最終會產生垃圾。 –