Найти - Пользователи
Полная версия: sql like по русски
Начало » Базы данных » sql like по русски
1 2
Naota
Использую алхимию 0.4. Там стоит все по дефолту. И ни как не могу заставить выбирать данные на русском через LIKE без учета регистра букв. Пробовал ставить в базе разные кодировки полей в таблице, но не помогает. Подскажите как совладать с этим…
shiza
а просто юникод пробовал ставить?
нативно sqlite - чисто юникодная
Naota
shiza
а просто юникод пробовал ставить?
нативно sqlite - чисто юникодная
Просто юникод я не знаю как поставить. Использую mysql и работаю с ней через программу SQLyong. Там нет возможность поставить кодировку юникод. Я так полагаю проблема вся в том, что mysql не понимает кодировку.
PooH
shiza
а просто юникод пробовал ставить?
нативно sqlite - чисто юникодная
Вот как раз LIKE без учета регистра в sqlite c unicode не сделать :(
потому как lower и upper в ней с unicode не работают
Naota
Теперь я боле-мение понял. Модель у меня описана юникодом и хранит он в базе юникод… Значит надо, что бы mysql работал с юникодом или алхимия сохраняла все в утф. Думаю второй вариант предпочтительней. А то неохото лишние байты гонять :) Кто подскажет как это сделать?)
Naota
пишу так:
sqlalchemy.default.echo = true
sqlalchemy.default.convert_unicode = False
sqlalchemy.default.encoding='utf-8'
толку нуль, все равно в юникод херачит…
shiza
сори. я думал ты опечатлся и хотел написать sqlite (а это совсем не mysql), поэтому все что ниже моего первого ответа - не верно.

На самом деле - вопрос больше к MYSQL чем к питону.
Все дело в Collation.
Делаешь кодировку базы UTF8, charset поля utf8, Collation поля - utf8_unicode_ci.
Должно работать.
Naota
кодировку базы обязательно? остальное все делал. Щас поставлю пятерку, посмотрю что будет.
Naota
Поставил пятый мускул. База в юникоде.
Таблица:
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)
Результат одно слово “Пуля” :(
shiza
а если попробовать выполнить в SQLyong:
select * from test where name LIKE 'пуля'
Правильно выборку делает?
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB