MySQL collation, charset и др.

12
Jackyk
На сайте с 05.10.2005
Offline
342
1821

Здравствуйте.

Возникли вопросики некоторые по кодировке сайта и БД. Всегда этому вопросу уделял внимание в рамках "лишь бы работало", а в этот раз хочется сделать по уму. Будем устанавливать CMS (eZ Publish) на выделенный сервер. Сайт русскоязычный, мультиязычность не планируется, таргетинг на РФ. В целом хочется выставить так, чтобы при русскоязычном контенте было как можно меньше гимора. Ну, и чтобы поисковики всё внятно воспринимали, конечно. MySQL, по всей видимости, будет 5.0.x. Итак, вот какие вопросы.

1)Есть ли смысл использовать utf8? Или обойтись cp1251 или win-1251?

2)Допустим, создаем БД в phpMyAdmin. Какие выставить collations?

3)Что еще, кроме имени и сравнения (collation) надо в phpMyAdmin задать при создании новой базы? Там как бы только эти 2 поля и есть вроде, но вообще ведь в MySQL кроме MySQL connection collation есть еще и основная кодировка CHARACTER SET , а надо ли это задавать, и как это через phpMyAdmin задать?

4)Насколько эти значения "железобетонны"? Имеется в виду следующее: перевести, например, MyISAM в InnoDB можно как два файла переслать. А тут, если вдруг выставил что-либо не так, потом на уже созданной базе с русским контентом уже не поменяешь без скриптов-перекодировщиков, иначе всё рачком встанет, или это меняется также легко?

Заранее благодарен.

С уважением, Евгений

С уважением, Евгений.
VC
На сайте с 03.04.2006
Offline
63
#1

1. БД то тут причем? Это вопрос к тому в какой кодировке сайт делать, а кодировку в БД выбирать в зависимости от этого.

А чем cp1251 от win-1251 отличаются?

2. Те, которые Вам нужны, для вашей задачи.

3. Если 2 поля, то только их и можно задать. А вообще базу лучше не через phpMyAdmin создавать, так как желательно приписать базу к какому-либо пользователю.

4. Кодировка mysql по-умолчанию прописана в его конфиге, а в сценарии перед запросами ее можно изменить запросом "set name" и т.п.

Jackyk
На сайте с 05.10.2005
Offline
342
#2

vasa_c, спасибо, конечно, за доказатесльтво того, что я в данном вопросе разбираюсь хуже Вас. Если это было целью Вашего поста - Вы ее достигли. Замечу лишь, что разбирался бы хорошо - не спрашивал.

1. БД то тут причем? Это вопрос к тому в какой кодировке сайт делать.

Именно такой вопрос и стоит. В какой кодировке ЛУЧШЕ делать сайт с русским контентом для российской аудитории.

2. Те, которые Вам нужны, для вашей задачи.

Я как раз и спросил - какие значения collation лучше использовать для ДАННОЙ задачи (см. выше).

Ну, и далее по списку.

iexpert
На сайте с 01.09.2005
Offline
184
#3
Jackyk:
Здравствуйте.
1)Есть ли смысл использовать utf8? Или обойтись cp1251 или win-1251?
2)Допустим, создаем БД в phpMyAdmin. Какие выставить collations?
3)Что еще, кроме имени и сравнения (collation) надо в phpMyAdmin задать при создании новой базы? Там как бы только эти 2 поля и есть вроде, но вообще ведь в MySQL кроме MySQL connection collation есть еще и основная кодировка CHARACTER SET , а надо ли это задавать, и как это через phpMyAdmin задать?

Я не настолько тонко знаю MySQL, однако, там существует проблема:

если кодировка, которую выдает СУБД отлична от кодировки в которой все это там лежит, то показываться все будет нормально, програмные средства нонче на высоте, а вот поиск работать будет КРИВО, при поиске по текстовым полям будут выдаваться левые данные.

Так что ставьте 1251 не прогадаете.

Бойтесь ваших желаний, ибо они могут исполниться
Jackyk
На сайте с 05.10.2005
Offline
342
#4

iexpert, спасибо. Я обычно именно так и делал, но уже не раз встречал рекомендации пользоваться utf8. Правда, обычно об этом говорится именно в разрезе мультиязычности.

Может ли кто-нибудь сказать, есть ли у этой кодировки другие преимущества? И действительно ли могут иметь место проблемы с поиском по русским словам?

VC
На сайте с 03.04.2006
Offline
63
#5
Jackyk:
vasa_c, спасибо, конечно, за доказатесльтво того, что я в данном вопросе разбираюсь хуже Вас.

Очень жаль, что из моего ответа вы вынесли только это.

"Сравнения" зависят не от контента сайта а от структуры базы. Если не знаете что ставить - ставьте *_general_ci

utf8 предназначен для многоязычных текстов. На одноязычном он не нужен. Для русского лучше использовать windows-1251.

При разных кодировках входных данных и БД, при подключении к БД указывайте входную кодировку запросом "set names ..." и никаких проблем с поиском не будет.

Jackyk
На сайте с 05.10.2005
Offline
342
#6

vasa_c, большое спасибо, теперь стало яснее.

Если не знаете что ставить - ставьте *_general_ci

А *_general_ci имеется в виду та, что является основной кодировкой базы? Грубо говоря, если это MySQL 5.0, то там, вроде, по умолчанию стоит utf8 в качестве основной кодировки. И тогда "сравнение" надо ставить именно "utf8_general_ci", или "cp1251_general_ci"?

Кстати, поговорил с админом хостинга, где сервер арендуем, он сказал, что на MySQL 5.0 сделать основной кодировкой 1251 вообще непонятно как. Соответственно, либо надо использовать utf8, либо ставить mysql4.

VC
На сайте с 03.04.2006
Offline
63
#7

Вот ссылка неплохая

http://forum.edurm.ru/index.php?act=Print&client=printer&f=51&t=606

А какой кстати php? Если 4-й, то с utf вообще лучше не заморачиваться.

И php ли вообще?

Jackyk
На сайте с 05.10.2005
Offline
342
#8

php 4.4, это требование CMS, она с 5-м не работает. А MySQL поставили 5.0.2 пока. За ссылку спасибо.

Jackyk
На сайте с 05.10.2005
Offline
342
#9

Вопрос, тем не менее, так и остался. Поскольку это MySQL 5, то сам контент хранится в юникоде utf8. А сопоставление (collation) лучше выставить "utf8_general_ci", или "cp1251_general_ci"?

С уважением, Евгений

X
На сайте с 05.10.2005
Offline
140
#10

Раз контент в юникоде, логично все же сделать collation юникодное и сказать CMS, что у нас все в юникоде (ru_RU.UTF-8, например). Хотя можно и извратиться.

Юр. услуги для ООО,ИП,СМИ,товарные знаки, Лицензии связи (хостинг,SMS), авторское право Оффшоры,merchant account,карты
12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий