2

私はしばらくの間、MySQLでのエンコーディングの問題に苦労してきました。ラテン語だけでなく、キリル文字とアラビア語のテキストも含むデータベースを構築しています。それで、これが私がデータベースを作成する方法の例です:

CREATE DATABASE db1
DEFAULT CHARACTER SET utf8   
COLLATE utf8_unicode_ci;

次にテーブル:

CREATE TABLE TempTb1
(
ID INT PRIMARY KEY,
name VARCHAR(100) NOT NULL,
arabic VARCHAR(100) NOT NULL
)
DEFAULT CHARACTER SET utf8   
COLLATE utf8_unicode_ci;

そして、いくつかのデータを入れてそれを選択すると、奇妙な文字しか表示されません。それで私はそれをテストするために小さなPHPスクリプトを書きましたが、それも機能しません:

<?php
header('Content-type: text/plain; charset=utf-8');

$a = mysql_connect('localhost','root','') or die('Problem connecting to database!');
$b = mysql_select_db('db1') or die('Problem selecting database');
mysql_set_charset('utf8');
mysql_query("set names 'utf8'");
mysql_query('set character set utf8');

$query = mysql_query("SELECT * FROM Tb1;");

while($row = mysql_fetch_assoc($query))
    {   
        $id = $row['ID'];
        $name = $row['name'];
        $arabic = $row['arabic'];

        echo $id.' '.$name.' '.$arabic.PHP_EOL;
    }
?>

との両方utf8_unicode_ciでテストしましutf8_general_ciた。何が間違っている可能性がありますか?ところで、私はEasyPHP5.2.10を持っています。

4

2 に答える 2

1

あなたのキャラクターに何が起こっても、MySQLに到達する前に起こると思います。文字を入力すると、コンピューターによって文字が数字に変換されます。次に、これらの番号は、Webフォームとサーバー、Webサーバーとスクリプトインタープリター、データベースサーバーの間を移動し、同じ方法でWebページに戻ります。

データをどこにどのように入力しますか?データは入力された方法で終了する必要があります。データがWebフォームを介して提供されている場合は、Webページのエンコーディングとフォームの送信方法を確認してください。PHPスクリプトでそれらを取得する方法と、データベースサーバーに送信する方法。ここでの有罪の部分はおそらくMySQLではなく別の場所です。MySQLでもかまいません。しかし、それは起こりうる不正行為の唯一の場所ではなく、おそらくそうではありません。

ページを確認し、ブラウザに到着したヘッダーを確認します。

あなたの質問が受け取ったコメントについては、複数のISO5ファミリが必要なため、ISO5を使用するのは良くありません。ほとんどの場合、Unicodeエンコーディングを使用する必要があります。最適なのはutf-8です。また、これは、どのMySQLライブラリを使用するかについてではありません。ただし、そのライブラリに、古いものではほとんど発生しない既知のバグがない限りです。:)ベストプラクティスとして推奨されているものはすべて使用する必要があります。ただし、現在の問題は、使用しているライブラリとは関係ありません。悪は、データの入力方法とデータの表示方法の違いにあります。

于 2012-06-28T22:58:29.830 に答える
0

ページのヘッダーにこのメタがあることを確認してください

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" >

また、dbに接続した直後にこのクエリを実行してみることができます。

"SET NAMES 'utf8'"

お役に立てれば。乾杯

于 2012-06-28T23:07:58.913 に答える