0

データベースに単語リストを保存しようとしています。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 で単語リストが正しく表示されません。 ここに画像の説明を入力

ここで何が間違っていますか?

4

1 に答える 1

2

過去の経験ですでにこの問題に直面しており、次の手順で解決しました。

ステップ #1 : HEAD セクションで CHARSET を 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 : データベースの初期化

データベース接続を初期化するときは、「余分な行」を追加してください</p>

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

?>

なぜ最初の 2 行を追加するのですか? データベースは、格納されるデータの種類を認識している必要があるためです。

ステップ #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 で遊んでいるときにクエリ文字列を実行する前に、余分な 2 行を追加しています。

ステップ #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 データを検索するたびに 1 行追加するだけで十分です。

これでほぼ完了です。

これはあなたの問題を解決するのに役立つかもしれないと思います.

于 2013-01-05T21:52:54.997 に答える