2012-06-18 79 views
1

我知道這個問題之前已經被問過了,但所提出的解決方案似乎並不奏效。 我想插入文本到一個表,但我不斷收到這樣的:Python和MySQL錯誤的字符串值

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

有問題的字符爲:E

這是表的外觀:

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

任何幫助將不勝感激。

+0

是'\\'逃避些什麼呢?試着增加反引號。 – SomeKittens

+0

你將有讓我們知道什麼該字符串應該是,並顯示您正在使用的代碼。 –

+0

文字從哪裏來?你如何試圖將其插入到數據庫中?以前有人問過這個問題嗎? (我的猜測是你試圖將iso8859-1文本插入到utf-8數據庫列中) – geoffspear

回答

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代碼中檢查你的標題存儲方式。
假設變量標題存儲需要在DB的標題列中輸入字符串:

title = u'unicode_string'.encode('unicode_escape') 
+0

我改變了排序規則,但得到了相同的結果。 編碼擺脫了那個錯誤,但現在我得到一個UnicodeDecodeError:'ascii'編解碼器不能解碼位置3625中的字節0x95:序號不在範圍內(128) 更多提示? – pnsilva

+0

當你使用它時,你需要再次解碼字符串,你試圖打印或寫入文件,python默認爲系統默認(ascii) – PsyKzz

0

您需要特殊字符轉義,MySQLdb的已轉義特殊字符作爲escape_string功能。

標題= MySQLdb.escape_string '從你必須創建查詢類似的標題字符串和「:

Q = '(標題)

爲了逃避'' INSERT INTO rstest_article(標題)值(「%S」)「」」%(標題)

這應該解決的問題:)