1

使用してMySQLデータベーステーブルにデータを保存していましhtmlentities()たが、これはお勧めできないため、変更しています。

現在、データを (PDO 準備済みステートメントを使用して) 生の形式で保存し、必要に応じて出力時に変換しています。場合によっては、データを HTML として出力したいことがあります。

HTML 出力を受け取るすべての Web ページの文字セットが utf-8 に設定されています。ただし、この投稿で、そのポスター Mythli が次のように述べていること気付きました。サイトの文字セットは、データベースで使用する文字セットと同じです

データベース テーブルの「デフォルト文字セット」が latin1 に設定されているように見えます。

「utf8」に変更する必要がありますか?

4

2 に答える 2

1

はい、UTF-8 データをデータベースに保存する場合は、それらを UTF-8 テーブル/列に保存する必要があります。それ以外の場合は、次の 2 つのシナリオがあります。

  1. UTF-8 でエンコードされたデータを挿入することをデータベースに通知します ( を参照SET NAMES utf8)。データが格納されるはずの列が latin1 を格納するように設定されている場合、MySQL はエンコーディングを正しく処理し、入力を UTF-8 から latin1 に変換します。これにより、latin1 で表現できないすべての文字が失われます。
  2. UTF-8 データを挿入することをデータベースに通知していません。データベースは、latin1 でエンコードされたデータを想定しています。この場合、データベースは着信データを個々のバイトとして誤って解釈しますが、MySQL は個々のバイトを単純に保存するため、これはたまたま機能します。データベースではゴミのように見えますが、PHP へのラウンドトリップは透過的に機能します。

したがって、UTF-8 を UTF-8 列に格納することをデータベースに伝えると、データのクリーンなラウンドトリップが得られます。Web アプリでの Unicode Front To Back の処理も参照してください。

于 2012-06-13T13:16:21.047 に答える
0

はい。ただし、MySql には文字セットが異なる可能性があるいくつかのレベルがあり、照合は実際には最も重要なものではありません

物事がうまく機能することを確認するためのチェックリスト:

1)テーブル列の照合(htmlを保存しているフィールド)はutf-8を使用する必要があります

2) データベースへの接続。以下は、複数の落とし穴を処理します。

mysqli_query("SET NAMES 'utf8'");

3)あなたが言うように、データベースとテーブルのデフォルトの文字セットを変更することも良い考えです。おそらく、照合で大文字と小文字を区別しないことを望むでしょう (utf8_unicode_ci)

4) これは非ラテン文字が挿入される日までは問題にならないので、テストせずにこれを行う意味はほとんどありません。

一貫性を持たせる値と、テストする文字列の詳細は次のとおりです: http://adviesenzo.nl/examples/php_mysql_charset_fix/

Iñtërnâtiônàlizætiónが入ってきたとき、あなたはそれを手に入れました。

于 2012-06-13T13:16:11.613 に答える