4

ここで非常にストレスのかかる問題に直面しています..すべてが UTF-8 であり、DB とテーブルはすべて utf8_general_ci ですが、単一の PHP スクリプトから挿入または更新しようとすると、シンボルしか表示されません..しかし、phpmyadmin で編集すると、単語が正しく表示されます..phpで文字列にutf8_decode()関数を実行すると機能することがわかりましたが、混乱しているため、それを行う予定はありません。それを行わなくても機能するはずです:S

これをテストするために使用する基本的なコードを次に示します。

<?php
$conn=mysql_connect("localhost","root","root") 
  or die("Error");
mysql_select_db("mydb",$conn) or
  die("Error");
mysql_query("UPDATE `mydb`.`Clients` SET `name` = '".utf8_decode("Araña")."' WHERE `Clients`.`id` =25;", 
   $conn) or die(mysql_error());
mysql_close($conn);
echo "Success.";
?>

これは、php utf8_decode 関数で utf8 をデコードしない場合に得られるものです。

Araña の代わりに、Araña を取得します。

4

3 に答える 3

4

私は何度も同じ問題に遭遇しました。選択しているデータベース リンクのタイプが、挿入に使用しているタイプと異なる場合もあれば、ファイル データからデータベースへのリンクである場合もあります。

後者の例でmysql_set_charset('utf8',$link);は、魔法の答えです。

mysql_select_db でデータベースを選択した直後に、mysql_set_charset を呼び出します。

@ref http://php.net/manual/en/function.mysql-set-charset.php

于 2011-06-27T16:12:29.377 に答える
1

「アラーニャ」は UTF-8 です。文字 "ñ" は、スペイン語の ñ が UTF-8 でエンコードされた 2 バイトを表します。あなたがそれを読み返しているものは何でも、UTF-8を処理しておらず、ISO-8859-1として表示しています(表示されます)。

于 2010-11-30T03:09:31.687 に答える
1

あなたが言及したそのDDLは、文字セットではなく、照合に関係しています。正しいステートメントは次のようになります。

ALTER TABLE Clients CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;

クライアント ライブラリ (libmysql または PHP が使用しているドライバー) がデータを ISO-8859 にトランスコードしていないことを確認する必要があります。mysql_set_charset('utf8') は、クライアントのエンコーディングを明示的に UTF-8 に設定します。または、SET NAMES UTF8; を送信することもできます。データベースに接続した直後。これを暗黙的に行うには、my.cnf [client] ブロックを変更して、クライアントの文字エンコーディングとして utf-8 を使用します (および /etc/init.d/mysql をリロードして適用します)。いずれにせよ、クライアントがプルしている結果を台無しにしないようにしてください。

[クライアント] default-character-set=utf8

mbstring を使用している場合は、utf8_decode を使用する必要はありません。次の php.ini 構成により、PHP 側で UTF-8 が確実にサポートされるようになります。

mbstring.internal_encoding = utf-8
mbstring.http_output = utf-8
mbstring.func_overload = 6

最後に、結果を HTML で表示する場合は、ページのエンコーディングが明示的に UTF-8 であることを確認してください。

于 2011-06-28T01:09:01.880 に答える