Форум сайта python.su
Использую алхимию 0.4. Там стоит все по дефолту. И ни как не могу заставить выбирать данные на русском через LIKE без учета регистра букв. Пробовал ставить в базе разные кодировки полей в таблице, но не помогает. Подскажите как совладать с этим…
Офлайн
а просто юникод пробовал ставить?
нативно sqlite - чисто юникодная
Офлайн
shizaПросто юникод я не знаю как поставить. Использую mysql и работаю с ней через программу SQLyong. Там нет возможность поставить кодировку юникод. Я так полагаю проблема вся в том, что mysql не понимает кодировку.
а просто юникод пробовал ставить?
нативно sqlite - чисто юникодная
Офлайн
shizaВот как раз LIKE без учета регистра в sqlite c unicode не сделать :(
а просто юникод пробовал ставить?
нативно sqlite - чисто юникодная
Офлайн
Теперь я боле-мение понял. Модель у меня описана юникодом и хранит он в базе юникод… Значит надо, что бы mysql работал с юникодом или алхимия сохраняла все в утф. Думаю второй вариант предпочтительней. А то неохото лишние байты гонять :) Кто подскажет как это сделать?)
Офлайн
пишу так:
sqlalchemy.default.echo = true
sqlalchemy.default.convert_unicode = False
sqlalchemy.default.encoding='utf-8'
толку нуль, все равно в юникод херачит…
Офлайн
сори. я думал ты опечатлся и хотел написать sqlite (а это совсем не mysql), поэтому все что ниже моего первого ответа - не верно.
На самом деле - вопрос больше к MYSQL чем к питону.
Все дело в Collation.
Делаешь кодировку базы UTF8, charset поля utf8, Collation поля - utf8_unicode_ci.
Должно работать.
Отредактировано (Май 13, 2008 13:54:31)
Офлайн
кодировку базы обязательно? остальное все делал. Щас поставлю пятерку, посмотрю что будет.
Офлайн
Поставил пятый мускул. База в юникоде.
Таблица:
CREATE TABLE `test` (
`id` int(11) NOT NULL auto_increment,
`name` text collate utf8_unicode_ci,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci CHECKSUM=1 DELAY_KEY_WRITE=1 ROW_FORMAT=DYNAMIC
test_table = Table('test', metadata, Column('id', types.Integer, primary_key=True, autoincrement=True), Column('name', types.Unicode) )
# -*- coding: utf-8 -*- def test(self): from video.model import Session, test_table from sqlalchemy.sql import select q = test_table.insert(values={'name':u'пуля'}) Session.execute(q) q = test_table.insert(values={'name':u'Пуля'}) Session.execute(q) q = test_table.insert(values={'name':u'ПуЛя'}) Session.execute(q) Session.commit() t = test_table.alias('t') q = select([t.c.name], t.c.name.like(u'Пуля')) s = [] for n in Session.execute(q): s.append(n.name) return ', '.join(s)
Офлайн
а если попробовать выполнить в SQLyong:
select * from test where name LIKE 'пуля'
Офлайн