我试图将wordlist保存到我的数据库中。 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);
}?>
我的数据库&#39;默认排序规则也是utf-8_turkish_ci。当我添加单词时,我的wordlist在phpmyadmin上显示错误;
我在这里做错了什么?
答案 0 :(得分:2)
我在过去的经历中已经遇到过这个问题,我通过以下步骤解决了这个问题,
步骤1: 在头部设置CHARFET到UTF-8
首先,浏览器需要知道您将在此页面中显示或使用Unicode。所以,转到你的部分并将字符集设置为utf-8。因此,浏览器将能够毫无错误地顺利显示Unicode文本。您还可以复制并粘贴以下行:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
第2步: 创建数据库
当您创建(a)数据库和(b)数据库中的任何表时,将它们的排序设置为utf8_unicode_ci,并且您知道如果使用phpMyAdmin则非常容易。
第3步: 数据库初始化
初始化数据库连接时,请添加“额外行”
<?php
define('HOSTNAME', 'localhost');
define('USERNAME', 'database_user_name');
define('PASSWORD', 'database_password');
define('DATABASE', 'database_name');
$dbLink = mysql_connect(HOSTNAME, USERNAME, PASSWORD);
mysql_query("SET character_set_results=utf8", $dbLink);
mb_language('uni');
mb_internal_encoding('UTF-8');
mysql_select_db(DATABASE, $dbLink);
mysql_query("set names 'utf8'",$dbLink);
?>
但为什么要添加额外的线?因为您让数据库知道您将很快使用哪种输入。
第4步: 在数据库中插入输入/数据
<?php
mysql_query("SET character_set_client=utf8", $dbLink);
mysql_query("SET character_set_connection=utf8", $dbLink);
$sql_query = "INSERT INTO
TABLE_NAME(field_name_one, field_name_two)
VALUES('field_value_one', 'field_value_two')";
mysql_query($sql_query, $dbLink);
?>
为什么要添加前两行?因为数据库应该知道将要存储哪种数据。
第5步: 更新数据库中的输入/数据
<?php
mysql_query("SET character_set_client=utf8", $dbLink);
mysql_query("SET character_set_connection=utf8", $dbLink);
$sql_query = "UPDATE TABLE_NAME
SET field_name_one='field_value_one', field_name_two='field_value_two'
WHERE id='$id'; ";
mysql_query($sql_query, $dbLink);
?>
因此,在使用Unicode时,在运行查询字符串之前添加额外的两行。
第6步: 从数据库中搜索数据
<?php
mysql_query("SET character_set_results=utf8", $dbLink);
$sql_query = "SELECT * FROM TABLE_NAME WHERE id='$id'; ";
$dbResult = mysql_query( $sql_query, $dbLink);
?>
每次搜索Unicode数据时添加一行,就足够了。
就是你差不多完成了。
我认为这可以帮助您解决问题。