Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用土耳其文本的mysql字符编码_Php_Mysql_Character Encoding_Turkey Test - Fatal编程技术网

Php 使用土耳其文本的mysql字符编码

Php 使用土耳其文本的mysql字符编码,php,mysql,character-encoding,turkey-test,Php,Mysql,Character Encoding,Turkey Test,我正在尝试将单词列表保存到我的数据库中。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

我正在尝试将单词列表保存到我的数据库中。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上看起来是错误的;


我做错了什么?

根据我过去的经验,我已经遇到了这个问题,我通过以下步骤解决了这个问题

步骤#1:在HEAD部分将字符集设置为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);

?>

尝试将所有内容放入utf8(数据库、数据库连接)。看到这一点,您从未告诉php/pdo phpmysql连接应该是utf-8,因此它可能默认为iso8859-1或其他什么,并损坏了您的文本。整个管道必须是utf8才能进行这种工作。browserphpmysql。如果任何地方的任何一个阶段都是不同的字符集,而中间没有适当的字符集转换例程,那么最终将是垃圾。
<?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);

?>
<?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);

?>
<?php

    mysql_query("SET character_set_results=utf8", $dbLink);

    $sql_query = "SELECT * FROM TABLE_NAME WHERE id='$id'; ";
    $dbResult = mysql_query( $sql_query, $dbLink);

?>