1

なぜそうなったのかはわかりませんが、環境に問題があることは間違いありません。私はdbを次のように宣言しました

CREATE DATABASE `mydb` /*!40100 DEFAULT CHARACTER SET latin1 */

次に、次のように宣言されたテーブルがあります

CREATE TABLE `myabstract_table` (
  `key_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `varchar_field` varchar(128) NOT NULL
  PRIMARY KEY (`key_id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

次に、この場合のphpコードには通常あります:

function execSQL($conn, $sql, $values = false) {
  try {
    $stmt = $conn->prepare($sql);
    if ($values) 
      foreach($values as $param=>$value)
        $stmt->bindValue($param, $value);
      if ( ! $stmt->execute() ) {
        error_log ("PDO Error: ".json_encode($stmt->errorInfo()));
        return false;
      }
  } catch (PDOException $e) {
      error_log ("Exception: " . $e->getMessage());
      return false;
  }
  return $stmt;
}

その後、文字列は(INSERTステートメントを介して)非ASCII記号の代わりに疑問符でdbに保存されます

PS。SQL リクエストの前に実行set names 'utf8'します。すべての php は UTF-8 用に構成されています。html ドキュメント ヘッダーには、文字セットとして指定された UTF-8 のメタ タグが含まれています。私が試みなかった唯一のことは、スキーマ自体のデフォルトの文字セット (現在は latin1 です) を変更することです。これは問題ではないと確信しているためです。またはそれは?

ここに画像の説明を入力

4

2 に答える 2

0

データベースの文字セットを UTF-8 またはキリル文字の文字セットに変更する必要があります。

Latin-1 はキリル文字をエンコードできないため、データベースで疑問符として表示されます。

編集: テーブルを UTF-8 文字セットで宣言しているのを見たので、困惑しています。

于 2013-07-03T10:22:27.490 に答える