0

データベースがあり、Navicat を使用しています。数年前の単純な PHP Web サイトがあり、サイトを UTF8 にアップグレードしました。

サイトには UTF8 の特殊文字を完全に処理する「アクティビティ」がありますが、サイトには「コメント」もあり、カーリーな一重引用符やその他の特殊文字は � を示します。

データベースは次の方法で UTF に変換されました。

ALTER TABLE tablename CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;

Navicat で両方のデータベースを見ると、両方とも と であることがわかりUTF8ますutf8_general_ci

テーブルをデザインすると、「アクティビティ」テーブルが表示され、セルが mediumText であり、UTF8 で設定されていることがわかります。「コメント」セクションを設計すると、機能しないセルはブロブであり、文字エンコーディング情報がありません。

非常に基本的な SELECT を実行し、$vairable[column] を介して表示しています。

「アクティビティ」がUTF8で完全に機能し、「コメント」に問題がある理由を知っている人はいますか? 私たちはどちらにも特別なことをしていません。

Blob をテキスト フィールドに変換しようとしましたが、そうすると、ページに出力するときにデータベースがエスケープするため、テキストに単一引用符があるとすぐに切断されます。

私は utf8_encode、stripslashes、mysql_real_escape_string、htmlentities、htmlspecialchars などを試しましたが、いずれにしても役立つかどうかはわかりません。

ありがとう!

4

1 に答える 1

0

blob は、バイナリ ラージ オブジェクトを意味します。バイナリ データには、未加工のエンコーディングはありません。

したがって、blob に latin1 などのデータがあり、それを表示して utf-8 データのように扱います。

PHPなどを使用してデータを手動で変換する必要があります。

これは、できることを説明するパフォーマンスブログの優れた記事です。

http://www.mysqlperformanceblog.com/2013/10/16/utf8-data-on-latin1-tables-converting-to-utf8-without-downtime-or-double-encoding/

クエリの実行に問題がある場合は、phpMyAdmin の代わりにコンソールを使用し、接続エンコーディングを忘れないでください。SET NAMES

master> ALTER TABLE t CONVERT TO CHARACTER SET utf8, CHANGE comment comment TEXT;
master> SET NAMES utf8;
于 2013-12-04T15:08:14.710 に答える