LC_COLLATE и LC_CTYPE поддерживают для utf-8 в postgreSQL - PullRequest
21 голосов
/ 05 июля 2011

По этой ссылке http://wiki.postgresql.org/wiki/Todo:Collate и http://www.postgresql.org/docs/9.1/static/collation.html. это сбивает меня с толку.

Они сказали, что поддержка utf-8 зависит от возможностей ОС и ее различия между каждым LC_COLLATEи LC_CTYPE опции.

Когда я создаю базу данных, используя pdAdmin III, есть 3 опции, C, Posix and English_United States.1252.В чем разница между C, Posix and English_United States.1252?

Я хочу работать со всеми поддерживаемыми языками, то есть unicode utf-8, что, кажется, не вариант.

Что я должен выбрать длязначения LC_COLLATE и LC_CTYPE для создания базы данных, поддерживающей utf-8 в PostgreSQL 9?

1 Ответ

13 голосов
/ 05 июля 2011

Как документация, 22.2.Поддержка набора символов говорит:

Однако важным ограничением является то, что каждый набор символов базы данных должен быть совместим с настройками языкового стандарта базы данных LC_CTYPE (классификация символов) и LC_COLLATE (порядок сортировки строк).Для локали C или POSIX разрешен любой набор символов, но для других локалей есть только один набор символов, который будет работать правильно.(Однако в Windows кодировка UTF-8 может использоваться с для любой локали .)

Я вижу, что, вероятно, у вас есть PostgreSQL под хостом Windows (English_United States.1252 locale), поэтомуВы можете использовать все, что из этого (Posix такое же, как C и означает «без локали»), прочитайте 22.1.Поддержка локали :

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

Если вы хотите, чтобы система работала так, как если бы онане имел поддержки языкового стандарта, используйте специальный языковой стандарт C или POSIX.

РЕДАКТИРОВАТЬ:

Платформа Windows не совместима с POSIX, поэтому следует использовать C локаль для этой платформы.Я не знаю, почему в инсталляторе есть опция POSIX (думаю, это скорее ошибка):

enter image description here

Чтобы создать новый кластер без локали, вы можете просто использовать переключатель --no-locale, например:

initdb --no-locale -E UTF-8 C:\pgdata
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...