2

次のコードを使用して、データベースにデータを保存および更新します。

<?php
header("Content-Type: text/html;charset=UTF-8", true);
mysql_connect("localhost", "test", "test") or die(mysql_error());
    mysql_select_db("test") or die(mysql_error());

    // mysql_set_charset('UTF8');
    mysql_query("SET NAMES 'utf8'");
    mysql_query("SET CHARACTER SET utf8");
    mysql_query("SET COLLATION_CONNECTION = 'utf8_unicode_ci'");




    mysql_query("UPDATE `test`.`english` SET age = '".$age."', city = '".mysql_real_escape_string($_REQUEST['city'])."', aboutMe = '".$_REQUEST['about']."' WHERE `english`.`username` = '".$_REQUEST['username']."' LIMIT 1 ;") 
    or die(mysql_error());  

コードはうまく機能しています。ただし、「city」などの文字列にä、ö、üが含まれている場合は、?として格納されます。たとえば、「Bär」という単語は「B?r」になります。

私はすでにこれらのutf8のものを追加しましたが、それは役に立ちません。サーバーはphp4.xのみをサポートしています

編集:DBは照合としてlatin1_general_ciを使用しています。

4

4 に答える 4

0

照合としてutf8を使用します。多分utf8_binまたはutf8_unicode_ci

(ciは大文字と小文字を区別しないことを意味するため、 "John" = "JOHN"のような比較ではtrueが返されます)。これを行うには、MySQLで次のクエリを実行します。

alter table `test`.`english` convert to character set utf8 collate utf8_unicode_ci;
于 2012-11-24T15:27:23.973 に答える
0

テーブル照合をに変更しますutf8_bin

デフォルトの文字セットと既存の列の文字セットを含むテーブルの照合を変更するには(convert to句に注意してください):

ALTER TABLE tableName CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin

utf8_general_ci

ä = a
ö = o
ü = u

しかしでutf8_bin

ä != a
ö != o
ü != u
于 2012-11-24T15:27:28.203 に答える
0

ut8_unicode_ciを保持し、これをphpコードに追加します。

mb_language('uni');
mb_internal_encoding('UTF-8');
mysql_query("set names 'utf8'",$connection); 

私はこれをどこでも(キリル文字、中国語など)使用しており、すべてのクエリ(挿入または更新)で機能しています。

 <?php
        header("Content-Type: text/html;charset=UTF-8", true);
        $connection = mysql_connect("localhost", "test", "test") or die(mysql_error());

        mb_language('uni');
        mb_internal_encoding('UTF-8');
        mysql_query("set names 'utf8'",$connection);

        mysql_select_db("test") or die(mysql_error());
        mysql_query("UPDATE `test`.`english` SET age = '".$age."', city = '".mysql_real_escape_string($_REQUEST['city'])."', aboutMe = '".$_REQUEST['about']."' WHERE `english`.`username` = '".$_REQUEST['username']."' LIMIT 1 ;") 
        or die(mysql_error());  
于 2012-11-24T20:30:53.893 に答える
0

私はそれを動かしました。この振る舞いについての説明はありません。phpファイルをutf8からlatin1に変更しました。

mysql_query("SET NAMES 'latin1'");
mysql_query("SET CHARACTER SET latin1");
mysql_query("SET COLLATION_CONNECTION = 'latin1_general_ci'");

MySQL DBでは、テーブルと列の照合はutf8_unicode_ciです。

現在、€記号以外のすべての文字で機能しています。

于 2012-11-25T12:47:11.567 に答える