Модераторы: LSD
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Смена кодировки БД, WIN1251 -> UTF-8 
:(
    Опции темы
53x7u5
  Дата 31.5.2010, 00:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 26.5.2010

Репутация: нет
Всего: нет



Добрый вечер, сразу скажу что свою проблему как мне кажется решить удалось, но вопросы у меня остались.

Мне доводилось немного ковырять MySQL таблицы когда-то еще на лабах в университете, а сейчас возникла необходимость оценить работу с postgreSQL и неприятный косяк ждал меня почти сразу.

С postgreSQL я работаю у себя на локалке в связке Денвер3 + расширение для PostgreSQL 8.4 с утилитой phpPgAdmin.

Так вот по умолчанию сразу после первого запуска создается учетка USER/LOGIN postgres/postgres и исходя из специфики ОС устанавливается кодировка по умолчанию. В Win XP мы получаем "из коробки" кодировку WIN1251 которая нам как раз таки и не нужна, т.к. нас интересует UTF-8. Проблема в том что даже при создании новой базы данных с любой другой кодировкой (юникод в нашем случае) процесс будет прерван и вывалится сообщений об ошибке которое какбэ намекает что создание таблиц в кодировке отличной от системной (?) не допускается. В данном случае в качестве кодировки по-умолчанию, как я и говорил, использовалась win1251.

Немного пошарившись по форумам и почитав rtfm выяснилось что новые таблицы создаются на оснвое двух шаблонов - 'template0' и 'template1'. В частности, насколько я понял, конструктор таблиц при работе через phpPgAdmin использует template1 в котором и зафиксирован win1251, будь он неладен.

Решение проблемы с кодировкой судя по всему возможно путем сброса template1 например способом достаточно подробно описанным тут. Но, если по-чесноку, то я с ним не разобрался совершенно. Буду благодарен если кто-нибудь подскажет мне ньюбу где в какой консоли все это нужно было вводить.

Методом научного тыка я добился только того что случайно снес дефолтную бд и пришлось сносить postgreSQL  и устанавливать её заново.

Далее на глаза попалась утилита pgAdmin III. Опять же самым популярным методом у новичков удалось понять что это оболочка позволяет устраивать все те же манипуляции с таблицами (а может быть даже и больше). Попытавшись создать новую таблицу с кодировкой UTF-8 и полем Template оставленным по-умолчанию получил ту же ошибку что и в phpPgAdmin. Однако тут уже я обратил внимание на HINT: Use thу same encoding as in the template database, or use template0 as template. На мою внимательность конечно можно попенять, но использовать template0 в phpPgAdmin все равно нельзя (или я не знаю как). А вот при создании новой таблицы через pgAdmin III этот темплейт использовать можно - он содержится в выпадающем списке при выборе Template [postgres, template0, template1]. Таким образом если для конструктора в качестве Template выбран template0, то можно указывать любую кодировку. В результате всех фрикций получаем:
Код
-- Database: some_table

-- DROP DATABASE some_table;

CREATE DATABASE some_table
  WITH OWNER = "53x7u5"
       ENCODING = 'UTF8'
       LC_COLLATE = 'Russian_Russia.1251'
       LC_CTYPE = 'Russian_Russia.1251'
       CONNECTION LIMIT = -1;


Выходит что частично проблема решена. Неясно только на что влияют Collation и Character type.

Хороший мануал на русском языке по postgreSQL я пока не нашел. Поэтому, уважаемые знатоки, внимание вопрос:
1. На что влияют Collation и Character type? (навредят ли мне эти два параметра если мне нужно чтобы вся база данных была unicode)
2. Как можно было воспользоваться template0 в отсутстиве pgAdmin III для того чтобы создать таблицу в кодировке отличной от "системной" win1251?
3. Бонусный: что и где нужно было ковырять чтобы получить результат описанный по ссылке ранее?

Спасибо, жду ваших ответов.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PostgreSQL | Следующая тема »


 




[ Время генерации скрипта: 0.0360 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.