1

この質問が以前に尋ねられたことは承知していますが、提示された解決策はうまくいかないようです。テーブルにテキストを挿入しようとしていますが、これを取得し続けます:

Warning: Incorrect string value: '\xEBrt of...' for column 'title' at row 1

問題の文字は次のとおりです。

テーブルは次のようになります。

CREATE TABLE `rstest_article` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `source_id` int(11) NOT NULL,
  `title` varchar(200) NOT NULL DEFAULT '',
  `link` varchar(200) NOT NULL DEFAULT '',
  `content` longtext NOT NULL,
  `description` longtext NOT NULL,
  PRIMARY KEY (`id`),
  KEY `rstest_article_89f89e85` (`source_id`),
  CONSTRAINT `source_id_refs_id_c47b907b` FOREIGN KEY (`source_id`) REFERENCES `rstest_source` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=606 DEFAULT CHARSET=utf8;

次のように、同じ文字セットを持つ別のデータベースからテキストを取得しています。

_cursor.execute('SELECT title,link,content,descr,channel FROM articles')
    rows = _cursor.fetchall()
    for row in rows:
        article = Article(source=src,title=row[0],link=row[1],content=row[2],description=row[3])
        article.save()

どんな助けでも大歓迎です。

4

2 に答える 2

4

テーブルの照合を変更してみてください。

ALTER TABLE rstest_article CHARACTER SET utf8 COLLATE UTF8_general_ci;

または、1つの列に対してのみ照合を変更します。

ALTER TABLE rstest_article MODIFY COLUMN title varchar(200) DEFAULT '' CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL;

また、Pythonコードで、タイトルの保存方法も確認できます。

title = u'unicode_string'.encode('unicode_escape')
于 2012-06-18T19:48:33.053 に答える
0

特殊文字をエスケープする必要があります。Mysqldb には特殊文字をエスケープするための escape_string 関数があり
ます。

タイトル = MySQLdb.escape_string(タイトル)

タイトル文字列から' と "をエスケープするには、次のようなクエリを作成する必要があります。

q = ''' rstest_article(title) に挿入値("%s") ''' % (title)

これで問題は解決するはずです:)

于 2012-06-19T02:35:31.920 に答える