|
 32.1 Кб |
|
| Добрый день! Помогите пожалуйста разобраться с кодировками в MySQL, кое-что не понимаю.
Вопросов несколько. Задам по очереди, чтобы не смешивать мух с котлетами)
1. Какую роль играет поле "collation" ( или "сравнение" в русской версии phpMyAdmin)? На что оно влияет? | |
|
|
|
|
|
|
|
для: alexey_tihonenko
(08.02.2010 в 11:56)
| | Здравствуйте!
Если говорить просто - кодировка в которой хранится информация и в которой производятся операции с ней. Подробнее почитайте по ссылке: http://dev.mysql.com/doc/refman/5.0/en/charset-connection.html
Совет из опыта: чтобы никогда не мучатся с кодировками, везде указывайте utf8_general_ci, а в скриптах сразу после подключения к базе данных выполняйте запрос:
| |
|
|
|
|
|
|
|
для: Temnovit
(08.02.2010 в 12:16)
| | У (большинства) языков есть различия в буквах, которые могут учитываться или игнорироваться при сравнении строк.
К ним относятся обычно
1. чувствительность к размеру букв - различие заглавных и строчных букв (case sensitivity)
2. чувствительность к акцентам (отличие е и ё)
Методика сравнения строк зависит от языка (потому что наборы букв в разных языках разные даже при едином написании) и от выбранных различий.
Выбранная методика и указывется в этом поле.
general обычно означает общая политика для большей части языков группы
cs - case sensitive - чувствительно к размеру
ci - case insensitive - нечувствительно к размеру
bin, binary - жесткое побайтовое сравнение | |
|
|
|
|
|
|
|
для: Trianon
(08.02.2010 в 13:52)
| | А в каком виде может происходить это сравнение?
Например, запрос из скрипта:
"SELECT * FROM fruits WHERE name = 'Апельсин' "
|
Если у меня кодировка файла, в котором сохранен скрипт, и значение поля collation не совпадают, то соответствие не будет найдено, даже если запись "Апельсин" в таблице будет? | |
|
|
|
|
|
|
|
для: Alexey_Tihonenko
(08.02.2010 в 14:15)
| | кодировка - это название кодовой страницы.
Поле collation - название сравнения.
Они всяко не совпадут.
А вообще кодировка в которой идет обращение к серверу, и в которой от него ожидается результат, указывается оператором SET NAMES . Обычно это и есть кодировка файла со скриптом и кодировка сайта.
С точностью до того, что каноническое название Windows-1251 сервером MySQL не принимается. А принимается старое cp1251. А по сути это одно и то же. | |
|
|
|
|
|
|
|
для: Trianon
(08.02.2010 в 14:52)
| | Так, теперь назначение этого более-менее прояснилось.
Только я не пойму, зачем в нем указана кодировка? Это просто префикс, который добавляется исходя из того, в какой кодировке MySQL хранит данные выбранной таблицы? | |
|
|
|
|
|
|
|
для: Temnovit
(08.02.2010 в 12:16)
| | >Если говорить просто - кодировка в которой хранится информация и в которой производятся операции с ней.
Т.е. если я через phpMyAdmin отправлю запрос на вставку в таблицу слова, написанного русскими букками, то это слово будет сохранено в кодировке cp-1251, верно?
А если бы я изменил значение этого поля на utf8, то, тоже слово, введенное с клавиатуры русскими буквами, было бы сохранено в кодировке utf8, верно? | |
|
|
|
|
|
|
|
для: Temnovit
(08.02.2010 в 12:16)
| | >Совет из опыта: чтобы никогда не мучатся с кодировками, везде указывайте utf8_general_ci, а в скриптах сразу после подключения к базе данных выполняйте запрос:
>
А этот запрос что делает? | |
|
|
|