- Set character set windows 1251
- Sergey Danielyan
- Корректная настройка MySQL для работы с UTF8
- Рабочее окружение
- Параметры кодировок MySQL
- Кодировка (character set) и представление (collation) сервера
- Кодировка (character set) и представление (collation) базы данных
- Кодировка (character set) и представление (collation) таблиц
- Кодировка (character set) и представление (collation) колонок в таблице
- skip-character-set-client-handshake
- Верификация настроек
Set character set windows 1251
у меня апач 2.58, php5, MySQL 4.1
и если возможно, обьясните как составить запрос к базе на изменение кодировок.
1.5 , sekrett ( ? ), 01:08, 01/06/2007 [ответить] [﹢﹢﹢] [ · · · ] | + / – |
Только этой строчки вполне достаточно, если на момент компиляции чарсет и колейшн были указаны правильно: init-connect=»SET NAMES cp1251″ Для рута действительно не действует. Спасибо за статью, сыкономил время. |
1.6 , Elias ( ? ), 16:33, 09/07/2007 [ответить] [﹢﹢﹢] [ · · · ] | + / – |
Попробовал Ваш метод — помогло. у меня на php 4.4 все работало, а на 5 не захотело. спасибо за статью. |
1.7 , andrew ( ?? ), 10:10, 19/07/2007 [ответить] [﹢﹢﹢] [ · · · ] | + / – |
Благодарю, работает. |
1.8 , BezTain ( ? ), 00:46, 25/10/2007 [ответить] [﹢﹢﹢] [ · · · ] | + / – |
Спасибо большое! Слов нет, спас! |
1.9 , Никита ( ?? ), 03:23, 29/11/2007 [ответить] [﹢﹢﹢] [ · · · ] | + / – |
Автору большое спасибо и респект! |
1.10 , Gleb ( ? ), 15:28, 05/12/2007 [ответить] [﹢﹢﹢] [ · · · ] | + / – |
Автору и Geosan респект. Совместив их указания заставил нормально понимать кириллицу Mysql 5.0 |
1.11 , lucky_777 ( ? ), 16:51, 22/01/2008 [ответить] [﹢﹢﹢] [ · · · ] | + / – |
1.12 , Иван ( ?? ), 17:25, 19/02/2008 [ответить] [﹢﹢﹢] [ · · · ] | + / – |
Также хорошая статья по этому поводу находится здесь, мне помогла именно она http://novikov.ua/articles/web-adaptation/6766/ |
1.13 , Netch ( ? ), 14:11, 03/03/2008 [ответить] [﹢﹢﹢] [ · · · ] | + / – |
Благодарность авторам. |
1.14 , usupov ( ? ), 16:40, 21/03/2008 [ответить] [﹢﹢﹢] [ · · · ] | + / – |
SET character_set_clien cp1251 SET character_set_connection cp1251 SET character_set_database cp1251 SET character_set_results cp1251 SET character_set_server cp1251 SET character_set_system utf8. не понадобилось. изменил php.ini, my.ini. добавил юзер с огран. правами и все сработало. Спасибо всем.. Батыр с Кыргызстана |
1.15 , Egor ( ?? ), 15:10, 16/04/2008 [ответить] [﹢﹢﹢] [ · · · ] | + / – |
Мой рецепт: 1. Система на windows, mysql4.1 (default charset=utf8), php 5 2. Удостовериться что кодировка в dump’e действительно cp1251 (в моём случае было в UTF8, хотя все таблицы создавались с указанием cp1251, Т.е. был кривой dump. Перекодировал с помощью ultraedit32). 3. Сверху в dump’e прописать: SET character_set_client = cp1251; 4. Создать таблицу: 5. Импортировать данные 6. в PHP скриптах: Sergey DanielyanКорректная настройка MySQL для работы с UTF8Сегодня речь пойдет о MySQL и о настройке UTF8 кодировки по-умолчанию. Тема заезжена, но как я убедился за прошедшую неделю, мало кто в состоянии нормально пояснить какие параметры и куда надо прописать для полноценной работы с UTF8 в MySQL. К сожалению, ситуация на тематических блогах оставляет желать лучшего. Основной тип ответа — приведение соедржимого конфигурационного файла с комментарием типа “попробуй, у меня это работает”. Основная цель данного поста — выяснить, какие параметры и с какими значениями следует прописать в конфигурационный файл my.cnf (my.ini) для дальнейшей беспроблемной работы с Юникодом. Рабочее окружениеUTF8 на данный момент у меня успешно работает в Мастер-Слейв конфигурации:
Любой внешний клиент в состоянии корректно работать с UTF8 базой (проверено на EMS Manager for MySQL c Windows 8 x64). Все опции и настройки я привожу для версии сервера 5.1.x, однако с минимальными (а то и вовсе без оных) изменениями все это будет работать и на версиях 5.5.x и 5.6.x. Параметры кодировок MySQLДовольно часто приходится видеть в ответах на вопросы о настройке UTF8 следующее: Предполагается, что после вставки всего этого добра (тут кстати есть противоречащие друг другу опции) в конфигурационный файл my.cnf (my.ini) магический Юникод начнет работать. Но давайте забудем о списке и попытаемся разбираться со всеми опциями сами и начнем с самого начала. То есть с документации. Потому как все это прекрасно описано в документации MySQL на официальном сайте. Я лишь постараюсь последовательно рассказать о параметрах сервера и прояснить неясные моменты. Главный раздел по описанию кодировок (character sets) и их представлений (collations — используется например при сортировке) в контексте сервера, базы, таблиц — это секция 10.1.3. Specifying Character Sets and Collations. Символьная кодировка может быть задана для:
Сделано это для гибкой настройки баз данных и доступа клиентов с разными кодировками. Однако, последнее не входит в область рассмотрения данного поста, поэтому будем рассматривать вариант с кодировкой UTF8 настроенной для всего по-умолчанию. Все параметры могут быть переданы серверу тремя разными способами:
Второй и третий варианты рассматриваться не будут. Тут уместно будет просто прочитать официальные доки — в каждом разделе приведены примеры конфигурации с использованием всех трех способов. Я же буду использовать первый вариант. Кодировка (character set) и представление (collation) сервераКодировка (characher set) — набор используемых символов. Тут есть несколько фундаментальных вещей которые надо понимать. Основные параметры используемые в контексте сервера — это character_set_server и collation_server . Оба параметра влияют на определение кодировки и отображения сервера MySQL. Можно задать оба параметра либо только один из них. При этом важно знать как задача того или иного влияет на определение отсутствующего: Не заданы — используются значения по умолчанию (дефолтные), Заданы оба — используются указанные кодировка и ее представление, Задана только кодировка — ее представление выставляется по умолчанию для данного типа кодировки. Что это значит? Для каждого типа кодировки есть ее дефолтное представление, например, дефолтная кодировка сервера — latin1 , а дефолтное отображение для нее — latin1_swedish_ci . Посмотреть соответствие кодировки и ее дефолтного представления можно используя команду:
Поле Default дает ответ о представлении выбранной кодировки. В нашем случае, при настройке дефолтной кодировки в UTF8, параметры должны быть определены, так как могут быть использованы при определении кодировки или представления базы данных: Наши команды:
Дефолтное представление для utf8 — utf8_general_ci , так что если бы мы его использовали вместо utf8_unicode_ci , то параметр collation_server можно было бы вообще опустить. Кодировка (character set) и представление (collation) базы данныхТут есть два варианта определения кодировки и представления: явно — при выполнении запроса на создание базы данных:
неявно через переменные character_set_database и collation_database . Однако, эти переменные нельзя задать явно ни в командной строке ни в конфигурационном файле. Как они инициализируются — чуть ниже. Вообще при работе с базой данных огромную роль помимо серверных настроек играют настройки клиент-серверного соединения (connection). На этом этапе вступают в игру следующие специфичные для соединения параметры:
Есть еще представление кодировки соединения ( colation_connection ). Для чего нужен этот параметр думаю пояснять не надо. Озадачиваться проблемой инициализации всех этих переменных не стоит (хотя в нашем случае присвоить им значения необходимо). Есть способ проще: существует два типа запросов (statements) которые задают настройки соединения клиента с сервером группой: Запрос SET NAMES ‘charset_name’ [COLLATE ‘collation_name’]Параметр определяет в какой кодировке теперь будут приходить сообщения для сервера от клиента. Прелесть в том, что запрос SET NAMES x эквивалентен следующей группе:
Для определении представления кодировки соединения ( colation_connection ) отличного от дефолтного, следует дополнить запрос:
А так как у нас utf8 и ее дефолтное представление utf8_general_ci , то нам нужно выпонить полный запрос:
Таким образом, используя только этот запрос, можно добиться корректной UTF8 инициализации соединения. Однако, тут есть один нюанс: SET NAMES x , как понятно из определения, определяет настройку клиента при коннекте к серверу. Но что делать, если клиент — сам mysql.exe и нам хочется установить collation_connection по-умолчанию, не выполняя каждый раз SET NAMES x при коннекте?
Но и тут есть еще одно но: init_connect команда не выполняется для SUPER пользователей — пользователей, обладающих привилегией SUPER. root входит в этот перечень, поэтому при коннекте root’ом команду SET collation_connection = utf8_unicode_ci все же придется выполнить вручную. Запрос SET CHARACTER SET charset_nameЗапрос групповой и он также эквивалентен следующей группе:
Согласно документации, разница между двумя запросами в том, что параметры character_set_connection и collation_connection будут установлены на @@character_set_database и @@collation_database соответственно (выше я про них упоминал). За более детальной информацией отсылаю по двум источникам — собственно к официальной документации и прекрасно оформленному ответу на stackoverflow.com. Для нашей задачи вполне хватает первого параметра вместе с дополнительной командой. Подытожим: различные сценарии и что юзается на каждом из них — относительно к настройкам соединения:
Наши команды:
[mysqld] Кодировка (character set) и представление (collation) таблицТут все довольно просто. Задать кодировку и ее представление можно через команды:
Тут главное иметь в виду, что если эти настройки не заданы, то берутся настройки базы данных (см. пред. раздел). Нам эти настройки не интересны. Кодировка (character set) и представление (collation) колонок в таблицеТут по аналогии с пред. секцией. Если параметры кодировок не указаны, берутся те, что указывались для таблицы. Прежде чем перейти к след. разделу, должен сказать, что все команды и запросы относятся к указанной версии MySQL и в случае возникновения каких-либо проблем советую обратиться к соответствующей версии документации. skip-character-set-client-handshakeПомимо освещенных параметров, есть еще один довольно часто фигурирующий в разного рода источниках — skip-character-set-client-handshake. Установка этого параметра позволит проигнорировать информацию клиента о кодировке. Я данный параметр не использовал. Верификация настроекИтак, вот финальный snapshot наших изменений в файле my.cnf (my.ini):
[client] После применения всех опций и рестарта сервера mysql для проверки настроек можно воспользоваться командами SHOW VARIABLES LIKE ‘char%’ и SHOW VARIABLES LIKE ‘collation%’ ; Состояние среды до изменений: Состояние среды после изменений (в случае, если вы приконнектились не SUPER пользователем): Для примера, вот отличие при соединении через mysql.exe пользователем с и без привилегии SUPER: с привилегией и выполненной вручную командой ‘SET collation_connection = utf8_unicode_ci’: Поздравляю, теперь ваши база, таблицы и все в таблицах по-умолчанию в кодировке UTF8. |