【发布时间】:2012-12-19 23:09:36
【问题描述】:
我正在尝试将一个单词表保存到我的数据库中。 Wordlist 是一个 utf-8 编码的文本文档。这是我的表结构;
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)。看到这个link。
-
你从来没有告诉 php/pdo phpmysql 连接应该是 utf-8,所以它可能默认为 iso8859-1 或其他东西,并且破坏了你的文本。整个管道必须是 utf8 才能正常工作。浏览器phpmysql。如果任何地方的任何单个阶段都是不同的字符集,而两者之间没有适当的字符集转换例程,那么您最终会得到垃圾。
标签: php mysql character-encoding turkey-test