Python和MySQL字符串值不正确

时间:2012-06-18 19:38:15

标签: python mysql character-encoding

我知道之前已经问过这个问题,但所提出的解决方案似乎不起作用。 我正在尝试将文本插入表格,但我一直这样:

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()

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:4)

尝试更改表格的排序规则。

ALTER TABLE rstest_article CHARACTER SET utf8 COLLATE UTF8_general_ci;

或仅更改一列的排序规则。

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')

答案 1 :(得分:0)

你需要转义特殊字符,Mysqldb有escape_string函数用于转义特殊字符:
假设一个变量标题存储字符串需要在db。的标题列中输入。

title = MySQLdb.escape_string(title)

为了从标题字符串中转义'和“,您必须创建类似以下内容的查询:

q ='''插入rstest_article(标题)值(“%s”)'''%(标题)

这应解决问题:)