Вот этот запрос проходит нормально:
INSERT IGNORE INTO PROFESSION (ID,NOMER,NAME,SUB_FAC_ID) VALUES (110,14300,'Физика Земли и планет',102);
Вот этот вызывает SQL-евский Warning: Incorrect string value, после которого выводится строка “медицинская физика” в utf-8:
INSERT IGNORE INTO PROFESSION (ID,NOMER,NAME,SUB_FAC_ID) VALUES (109,14000,'Медицинская физика',102);
А вот этот вызывает UnicodeEncodeError: ‘ascii can’t encode character u'\u0411': original not in range(128):
INSERT IGNORE INTO GROUP_ST (ID,NOMER,SUB_FAC_ID) VALUES (100,'Б8-01',100);
Объясните пожалуйста, почему так происходит?
Текст точно был конвертирован в utf-8.
Вот сам код:
#!/usr/bin/python #-*- coding: utf-8 -*- from MySQLdb import connections FILE = open('data.txt') HOST = 'localhost' DBNAME = 'students' USER = 'admin' PASSWORD = 'pass' def insert (title, header, vals): query="INSERT IGNORE INTO " + title + " (" + ','.join(header) \ + ") " + "VALUES (" + vals + ");" #Тут query точно в кодировке utf-8 cur.execute(query) con = connections.Connection(host=HOST, user=USER, passwd=PASSWORD, db=DBNAME, charset="utf8", use_unicode=True) cur = con.cursor() cond = "title" for l in FILE.xreadlines(): l = l.decode('utf-8').encode('utf-8') #Тут идет парсинг... insert(title, header, vals) con.close() FILE.close()
character_set там по умолчанию utf-8.