Под windows нельзя использовать в одной базе несколько языков из-за отсутствия UTF-8

Develar

Новичок
Под windows нельзя использовать в одной базе несколько языков из-за отсутствия UTF-8

Вышла 8.3 Beta. Я тестирую под виндой, production на debian и там проблем нет. А в windows, из-за отсутствия поддержки юникода, разработчики PostgreSQL были вынуждены сделать следующее http://www.postgresql.org/docs/faqs.FAQ_windows.html#2.6 Собственно, попытка установить с MULE_INTERNAL как server encoding приводит к падению установщика, и выходит я могу лишь windows-1251 в русской windows. И базу создать в utf-8 тоже не могу. Есть выход кроме как запросить со склада сервер с debian :)?
 

Wicked

Новичок
базу зафигачить в виртуальную машину с дебианом :) на этом же сервере.
 

Develar

Новичок
Wicked, да, видимо, придется.

Теперь ни MySQL 5, ни PostgreSQL 8.3 под виндой не пашут полноценно, они сравнялись...
 

tony2001

TeaM PHPClub
>NOTE! In PostgreSQL 8.1, (UTF8) UNICODE encoding is fully supported on Windows.
>This entry is only valid for version 8.0.

ммм?
 

Develar

Новичок
tony2001, наверное ошибка в доке. Я ставил на винду 8.2 и у меня все работало (сортировку на русские я не проверял - интерфейс пишется на adobe flex, хотя в целом работало). А вот с 8.3 Beta они озаботились ""65000 (UTF-7) and 65001 (UTF-8) are pseudo codepages." http://phpclub.ru/talk/showthread.php?s=&threadid=74005&highlight=%EB%EE%EA%E0%EB%FC и сервер PostgreSQL на запрос типа [sql]CREATE DATABASE "new_db"
WITH ENCODING = 'UTF8';[/sql] отвечает

ERROR: encoding UTF8 does not match server's locale Russian_Russia.1251
DETAIL: The server's LC_CTYPE setting requires encoding WIN1251.

лучше бы оно хоть как-то работало, чем заставлять использовать WIN1251.

-~{}~ 10.10.07 19:28:

tony2001, спасибо, в очередной раз заставили трезво подумать. Почему-то раньше, до 8.3 Beta, установщик разрешал initdb с UTF8, а сейчас нет. Если сделать initdb с С, то "One way to use multiple encodings safely is to set the locale to C or POSIX during initdb, thus disabling any real locale awareness." и все работает.
 

Sad Spirit

мизантроп (Старожил PHPClub)
Команда форума
Автор оригинала: Develar
лучше бы оно хоть как-то работало, чем заставлять использовать WIN1251.
Так оно не особо работало, как я понял там был, например, очень забавный глюк, который заключался в том, что Postgres пытался перевести сообщение об ошибке в нужную кодировку, у него не получалось, он выдавал новое сообщение об шибке и пытался перевести его в нужную кодировку, у него не получалось... После чего он отваливался уже жёстко, с ошибкой "PANIC: ERRORDATA_STACK_SIZE exceeded".
 

Develar

Новичок
Sad Spirit, да, вопрос, какое отношение имеет lc_messages # locale for system error message к кодировке БД? Все объясняется "the apparent flexibility to use different encodings in different databases of a cluster is more theoretical than real. It is likely that these mechanisms will be revisited in future versions of PostgreSQL" ((с) http://www.postgresql.org/docs/current/static/multibyte.html)?

... история с кастрированной виндой закончилась введением в 8.3 Beta параметра log_timezone, хотя можно было извратиться и перекодировать бред отдаваемый виндой из кодировки специфичной для версии windows (русская (для любой локали cp1251), итальянская и т. п.) в кодировку локали в нормальной ОС - странно что не реализовано такое решение (наверное, это очень не критично - я в своей CMF на это тоже забил).
 

Sad Spirit

мизантроп (Старожил PHPClub)
Команда форума
А по существу вопроса выясняется, что отсутствие UTF-8 в списке кодировок в 8.3beta1 было банальным багом. Обещают поправить в следующей бете.
 

Develar

Новичок
Sad Spirit, отчасти. Я в 8.2 делал initdb с Russian_Russia.1251 и мог создавать базы с кодировкой которая не соответствует локали, а 8.3 стала возникать закономерная ошибка "Encoding UTF8 does not match server's locale Russian_Russia.1251" и чтобы иметь базу с UTF8 я теперь должен делать initdb с С (так как в windows нет локали с кодировкой UTF8).
 

Sad Spirit

мизантроп (Старожил PHPClub)
Команда форума
Автор оригинала: Develar
и чтобы иметь базу с UTF8 я теперь должен делать initdb с С (так как в windows нет локали с кодировкой UTF8).
Добавят они UTF-8 для initdb, добавят. Там как-то хитро (несмотря на отсутствие локали) сделано.
 
Сверху