Что лучше?

kuchin

Новичок
Что лучше?

Мои сайты
http://myfilmz.net
http://reader2.com

сейчас работают на PHP5+MySQL4. Возникают некоторые проблемы. Большая часть из них конечно вследствие того, что я не очень большой спец в БД и мои запросы + структуры данных вряд ли сделаны достаточно оптимизированно, но все же...

Вопрос - я бы хотел хранить данные в юникоде, в одной и той же таблице данные на разных языках, и иметь возможность делать запросы, чтобы например регистронезависимость работала не только в английских словах. Можно ли это по-человечески сделать средствами PostgreSQL, или надо заводить отдельные таблицы, каждую под свой charset? В MySQL у меня не получилось обьединить в одну таблицу, хотя скорее всего виноваты мои кривые руки.

Второй вопрос - имеет смысл перейти с MySQL на PostgreSQL, и какие у меня в связи с этим будут преимущества? (У меня virtual dedicated server, могу ставить все что хочу).

Третий вопрос - кому-то интересно проконсультировать меня, поправить мои ошибки в структуре базы данных, соптимизировать запросы? Заплатить я вряд ли смогу много, но смогу поставить линк в футере на своих сайтах и прорекламировать в блоге.
 

neko

tеam neko
в postgresql нужно просто создать базу с кодировкой utf8
после этого проблем с языками быть не должно

вопрос о переходе тебе придется решить самостоятельно
смысла задавать его публично нет потому, что ни к чему кроме флейма это не приведет
скорее всего если тебя устраивает mysql то смысла нет
большинство из тех кто мигрировал в этом направлении делали это из-за того что для их нужд mysql не предоставлял достаточного набора инструментов
 

kuchin

Новичок
Я не специалист в базах данных, и MySQL меня не устраивает - по причине изложенной выше. То есть в PostgreSQL я смогу хранить данные на разных языках в одной таблице в кодировке utf8, а потом когда мне нужно сделать выборку по какому-то определенному языку, я устанавливаю кодировку соединению, и у меня будет работать регистронезависимый поиск по строкам в этой кодировке?
 

Фанат

oncle terrible
Команда форума
ээээ
ты сам-то понял, что сейчас сказал?

какой глубокий смысл в шаманских плясках ради поиска на каком-то языке?
почему нельзя просто искать нужную подстроку?
 

kuchin

Новичок
Смысл простой. Данные на сайтах на нескольких языках. При заходе на ru.reader2.com например идет работа на русском, при заходе на fr.reader2.com - на французском, il.reader2.com - иврит, и т.д. Если не выбирать правильную кодировку при работе, то пользователи не смогут искать книги по названию без учета регистра.
Сейчас каждый язык в отдельной базе данных, у которой прописана кодировка, например utf8_cyrillic (не помню точное название, но что-то типа этого) для русского.
 

Фанат

oncle terrible
Команда форума
эээ...
сдаётся мне, ты не понимаешь, что такое utf8
ты полагаешь, что это просто некий новый модный набор разных кодировок для разных языков?
типв, ранше была 1251 кирилик, кои-8 кирилик, а теперь ещё есть утф8-кирилик
так?
 

kuchin

Новичок
Я понимаю что такое utf8. А ты понимаешь что если сделать что-то типа SELECT ... WHERE title LIKE '%тратата%' то книга с названием ТРАТАТА найдена будет только если указать что я сейчас работаю с русской кодировкой?

-~{}~ 20.02.06 08:57:

По-крайней мере, именно так это работает в MySQL...
 

kuchin

Новичок
Тогда обьясните мне пожалуйста как правильно работать с utf8, чтобы не было вышеуказанной проблемы. У меня стоит MySQL 4.1 и регистронезависимый поиск работает только если правильно указать кодировку БД.
 

si

Administrator
У меня стоит MySQL 4.1 и регистронезависимый поиск работает только если правильно указать кодировку БД.
а как ты хотел, чтобы база сама угадывала в какой кодировке данные ?
 

kuchin

Новичок
Поэтому я и попросил обьяснений. Мне достаточно будет хранить данные в общей кодировке utf8, а при доступе к базе указать кодировку соединения utf8_cyrillic, и все будет работать?
 

si

Administrator
откуда ты взял utf8_cyrillic ? наверно стоит все-таки подумать над тем что сказал тебе Фанат немного выше.

Hint: в utf8 одновременно может быть и кириллица и "китаица"
 

kuchin

Новичок
Так, посмотрел как этот параметр называется правильно - collation. Я понимаю что в utf8 может быть одновременно куча разных языков, я к этому и стремлюсь. Когда я кладу данные в таблицу, или просто достаю их оттуда, все в порядке. Но когда я хочу сделать поиск по текстовым данным, например LIKE, то мне нужно чтобы регистронезависимость работала, а она не работает, т.е. поиск по "тра" не найдет строку "Тра". Я понимаю что руки у меня кривые :) И все же вопрос - если я просто укажу этот collation правильно при соединении с базой данных (а кодировка у базы будет "общая utf8"), то у меня будет работать регистронезависимость с тем языком что я указал в collation?
 

kuchin

Новичок
При этих параметрах у меня замечательно работало на английском, а вот регистронезависимый поиск по-русски не работал.

Фанат - я отлично понимаю что такое utf8, а так же что такое utf16 и utf32, и другие юникодные кодировки... Просто в применении к базам данных возникают такие вещи как этот collation, с которыми я не очень хорошо знаком.

-~{}~ 20.02.06 11:12:

Еще один вопрос вдогонку, возвращаясь к первому посту:
Я заметил что когда я делаю вложенный запрос (селект внутри селекта), то это работает раз в 10 медленнее чем если я вложенный запрос делаю отдельно и подставляю данные во второй запрос "вручную" в скрипте. Человек, который работает с MySQL 4.1 подтвердил, что там это реализовано очень неэффективно. Теперь вопрос - я бы все-таки хотел использовать этот синтаксис, т.к. намного удобнее. В MySQL 5.0 эта проблема решена, или до сих пор нет? В PostgreSQL есть такие проблемы? Насколько эффективнее работает?
 

neko

tеam neko
не должно быть таких проблем.
но вообще -- попробуй уже сам наконец.
 
Сверху