Уведомления

Группа в Telegram: @pythonsu

#1 Май 14, 2008 00:27:06

ZZZ
От: Москва
Зарегистрирован: 2008-04-03
Сообщения: 2161
Репутация: +  26  -
Профиль   Адрес электронной почты  

sql like по русски

Не знаю как в MySQL, а в каноническом SQL сопостовление с LIKE регистрозависимое. В PosrgreSQL есть способы задать вопрос так, как надо. Там даже стандартный re можно использовать…



Офлайн

#2 Май 14, 2008 08:07:56

Naota
От:
Зарегистрирован: 2007-06-04
Сообщения: 197
Репутация: +  0  -
Профиль   Отправить e-mail  

sql like по русски

ZZZ
Не знаю как в MySQL, а в каноническом SQL сопостовление с LIKE регистрозависимое. В PosrgreSQL есть способы задать вопрос так, как надо. Там даже стандартный re можно использовать…
В MySQL, LIKE регистро-независимый. Да и такой запрос:
select([func.upper(t.c.name).label('name')], func.upper(t.c.name).like(func.upper(u'Пуля')))
Дает одно слово “Пуля”. Регэкспы и в MySQL можно юзать.



Отредактировано (Май 14, 2008 08:08:45)

Офлайн

#3 Май 14, 2008 08:11:45

Naota
От:
Зарегистрирован: 2007-06-04
Сообщения: 197
Репутация: +  0  -
Профиль   Отправить e-mail  

sql like по русски

shiza
а если попробовать выполнить в SQLyong:
select * from test where name LIKE 'пуля'
Правильно выборку делает?
Нет, он так вообще ниче не находит. Нужно писать в юникоде. Если из таблицы взять кракозябру, то найдет. Но опять же одно слово.



Офлайн

#4 Май 14, 2008 08:15:04

shiza
От:
Зарегистрирован: 2007-07-03
Сообщения: 1073
Репутация: +  0  -
Профиль   Отправить e-mail  

sql like по русски

Если все кодировки правильно стоят, то SQLyong - в нужной колировке запрос делает.
У меня на твоей таблице и моем запросе, в SQLyong возвращаются все варианты слова “пуля”.



Офлайн

#5 Май 14, 2008 09:05:21

Naota
От:
Зарегистрирован: 2007-06-04
Сообщения: 197
Репутация: +  0  -
Профиль   Отправить e-mail  

sql like по русски

Ога. Проверил. Если все делать из SQLyong, то все работает. Ну ясно. Значит алхимия косячит. Есть идеи как его можно настроить?



Отредактировано (Май 14, 2008 09:10:24)

Офлайн

#6 Май 14, 2008 09:24:59

Naota
От:
Зарегистрирован: 2007-06-04
Сообщения: 197
Репутация: +  0  -
Профиль   Отправить e-mail  

sql like по русски

Решение нашел в соседней ветки. Session.execute( “SET NAMES UTF8” ) спасает…
Теперь надо всю базу перекодировать %)



Отредактировано (Май 14, 2008 09:26:28)

Офлайн

#7 Май 14, 2008 11:00:51

Naota
От:
Зарегистрирован: 2007-06-04
Сообщения: 197
Репутация: +  0  -
Профиль   Отправить e-mail  

sql like по русски

Неудобно жуть. При каждом запросе делать такую бяку :(



Офлайн

#8 Май 14, 2008 11:52:49

Ferroman
От:
Зарегистрирован: 2006-11-16
Сообщения: 2759
Репутация: +  1  -
Профиль   Отправить e-mail  

sql like по русски

Обверни во что-нибудь.
А лучше алхимию подфиксай ;)

Офлайн

#9 Май 14, 2008 12:46:25

Naota
От:
Зарегистрирован: 2007-06-04
Сообщения: 197
Репутация: +  0  -
Профиль   Отправить e-mail  

sql like по русски

Да просто, в каждом методе контроллеров __before__, пишешь эту чачу) Нет желания у меня копаться в алхимии. Будет долго, так как английский не знаю. Может со временем кто-то найдет решение покрасивше :)



Офлайн

#10 Сен. 18, 2008 21:47:50

Naota
От:
Зарегистрирован: 2007-06-04
Сообщения: 197
Репутация: +  0  -
Профиль   Отправить e-mail  

sql like по русски

Поковырялси я. Оказывается алхимия тут не при чем.

# -*- coding: utf-8 -*-

from MySQLdb import Connection

c = Connection("localhost", "lodin", "pass", "db")
c.query("INSERT INTO `Blog` (subject) VALUES ('тема')")
c.commit()
Пишет кракозябру в базу.
а так
# -*- coding: utf-8 -*-

from MySQLdb import Connection

c = Connection("localhost", "lodin", "pass", "db")
c.query("SET NAMES UTF8")
c.query("INSERT INTO `Blog` (subject) VALUES ('тема')")
c.commit()
всё отлично. Получается этот модуль надо править или я не знаю чё. Подскажите люди знающие!

P.S. В принципе можно изменить MySQLdb и в инициацию класса Connection, добавить self.query(“SET NAMES UTF8”) и будет все ровно.



Отредактировано (Сен. 18, 2008 22:06:59)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version