Art-master
Дек. 22, 2013 11:40:48
Снова добрый день!
Возникла проблема хранения данных в формате unicode в sql-таблицах, погуглил: так и не нашел.
Заранее скажу, что использую для этих нужд sqlite.
Пробовал сам: БД конечно, сохраняет строку у себя, но при выборке пишет примерно следующее:
sqlite3.OperationalError: Could not decode UTF-8 column ‘name’ with text ‘пример’
Заранее спасибо!
JOHN_16
Дек. 22, 2013 12:27:42
Art-master
показывайте код, ибо sqlite работает в UTF-8 по умолчанию, возможно проблема где то в коде
Art-master
Дек. 22, 2013 12:57:04
Вот
# coding: utf8
import sqlite3 as sql
db = sql.connect("data.db")
c = db.cursor()
c.execute(u"CREATE TABLE tab (id INT, name VARCHAR(100));")
c.execute(u"INSERT INTO tab VALUES (1, 'пример');")
c.execute(u"SELECT name FROM tab WHERE id=1;")
print c.fetchone()
db.commit()
db.close()
raw_input()
Только небольшая поправка - раньше я писал ровно то же самое в оболочке, теперь написал как скрипт, теперь выводит следующее:
SyntaxError: ‘utf8’ codec can't decode byte 0xef in position 30: invalid continuation byte
JOHN_16
Дек. 22, 2013 22:53:42
Art-master
ну во первых, в вашем коде уже синтаксическая ошибка, а именно не INTRO, а INTO… если это опечатка, то подумайте хорошенько как так получилось что вы на форум постите код который не проверяли.
во вторых, я скопировал, вставил, запустил и у меня все работает.
судя по наличию в конце raw_input у вас ОС Windows, так ли это? Вы действительно убедились что сам текст кода программы является текстом кодированным в utf-8, ведь верхняя строчка это указание интерпретатору о том что данный модуль кодирован в utf-8, но сам текст может быть кодирован как угодно (cp1251, cp866) - что может являться причиной разного рода ошибок, включая неявные.
Art-master
Дек. 23, 2013 19:47:14
Простите за синтаксис, но при переносе кода на форум, я его сделал немного более читабельным, и случайно написал INTRO.
Действительно, ошибка была кодировке самого скрипта, что весьма странно, как я мог этого не заметить.
Спасибо!