172 похожих чатов

Добрый день, скажите LC_COLLATE ru_RU.UTF-8 и en_US.UTF-8 не отличаются?

40 ответов

36 просмотров

Это системные locales, т.е. это полностью зависит от дистрибутива / libc.

1) Они отличаются, это разные объекты из pg_collation. 2) Сейчас в линуксе на glibc фактически последовательность символов одинаковая. 3) Судя по комментариям в /usr/share/i18n/locales/ru_RU -- некоторое время назад это было не так, буква й была какая-то особенная и в русской локали это исправляли.

Andrei-St Автор вопроса
Ilya Anfimov
1) Они отличаются, это разные объекты из pg_collat...

У меня история такая, нужно перейти на новый сервер а на нем только en_US.UTF-8 (это облачный постгрес) на старом соответственно ru_RU.UTF-8. Я девелоперам предлагаю перед переездем на старом сервере сперва перейти на en_US.UTF-8 и протестить поиск. Они говорят да там разницы все равно нету.

Andrei St
У меня история такая, нужно перейти на новый серве...

Ну вот, например (относящаяся к делу) часть /usr/share/i18n/locales/ru_RU c одного из "старых" debian: LC_COLLATE copy "iso14651_t1" % iso14651_t1 is missing Ukrainian ghe collating-symbol <UKR-GHE> reorder-after <CYR-GZHE> <UKR-GHE> reorder-after <U0453> <U0491> <UKR-GHE>;<BAS>;<MIN>;IGNORE reorder-after <U0403> <U0490> <UKR-GHE>;<BAS>;<CAP>;IGNORE reorder-end END LC_COLLATE Если в данных этого символа нет и никогда не было — то в плане collate эти locales совпадают, получается. Но лучше проверьте на своих серверах — мало ли что. ;)

Andrei-St Автор вопроса
Yaroslav Schekin
Ну вот, например (относящаяся к делу) часть /usr/s...

в примере речь о укринском. Да я кка админ как раз за то чтоб тестить ато после переезда прода будет поздно ) Как говориться как хотят так и будет, ток хотел предупредить какие возможно будут проблемы.

Andrei St
У меня история такая, нужно перейти на новый серве...

Я бы сказал, что надо тэстировать непосредственно на новых серверах. До переезда, ЕВПОЧЯ.

Andrei St
У меня история такая, нужно перейти на новый серве...

postgres=# create table test ( a text COLLATE "ru-RU-x-icu", b text COLLATE "en-US-x-icu"); CREATE TABLE postgres=# insert into test values ('ё', 'ё'), ('Z', 'Z'), ('Щ', 'Щ'); INSERT 0 3 postgres=# select * from test order by a; a | b ---+--- ё | ё Щ | Щ Z | Z (3 rows) postgres=# select * from test order by b; a | b ---+--- Щ | Щ Z | Z ё | ё (3 rows)

Andrei-St Автор вопроса
Ilya Anfimov
Я бы сказал, что надо тэстировать непосредственно ...

говорил, у ребят есть уверенность и не хотят телодвижений (тем более это еще и мой руководитель)

Andrei St
в примере речь о укринском. Да я кка админ как раз...

Так никто не мешает в базе с encoding UTF-8 хранить вообще любые символы, независимо то collation — откуда Вы знаете, что этого "Ukrainian ghe" там нет? ;) В общем, посмотрите соответствующие файлы на старом и новом серверах, да и всё.

Andrei-St Автор вопроса
Yaroslav Schekin
Так никто не мешает в базе с encoding UTF-8 хранит...

Судя по словам "облачный" и "только en_US.utf8" -- доступа в /usr/share/i18n/en_US там, скорее всего, не будет...

Andrei St
пасиб протестирую

Покажите ребятам приведённый пример и пусть смотрят до просветления :) Поменяется порядок сортировки и сравнения символов. libc у меня под рукой нету, только icu, но смысл одинаковый.

Andrei-St Автор вопроса
Ilya Anfimov
Судя по словам "облачный" и "только en_US.utf8" --...

все верно но я попробую таблицу с данными создать и отсортировать

Andrei-St Автор вопроса
Роман Жарков
Покажите ребятам приведённый пример и пусть смотря...

пасиб еще раз, ща я на 2-х сервера протестирую

Роман Жарков
postgres=# create table test ( a text COLLATE "ru-...

А это какая версия icu? У меня на 153.88 второе выдаёт хотя бы ilan=*> select * from test order by b; a | b ---+--- Z | Z ё | ё Щ | Щ

Роман Жарков
Покажите ребятам приведённый пример и пусть смотря...

Не одинаковый, то-то и оно. Вот процитированный мной кусок — это вообще всё, что отличает libc collations (в этом дистрибутиве!) en_US.utf8 и ru_RU.utf8. А в других дистрибутивах может быть по-другому — см. https://t.me/pgsql/342321

Роман Жарков
postgres=# create table test ( a text COLLATE "ru-...

То есть, я хочу сказать -- в разбивку русский-латинский-русский выглядит как совсем абзац, если честно.

Andrei St
все верно но я попробую таблицу с данными создать ...

А доступ под PostgreSQL superuser там тоже нет (иначе можно было бы "вытянуть" этот файл, т.к. у самого PostgreSQL должен быть к нему доступ)? А если нет — он же на чём-то (каком-то дистрибутиве) основан? Тогда можно было бы посмотреть эти файлы там.

Andrei-St Автор вопроса
Роман Жарков
postgres=# create table test ( a text COLLATE "ru-...

сори что в виде фото , это en_US.UTF-8 (на облачном постгрес)

Andrei-St Автор вопроса
Andrei St
screenshot сори что в виде фото , это en_US.UTF-8 (на облачно...

Это ни о чём не говорит в общем-то. Ну, кроме того, что СОВСЕМ большой проблемы с ё в этой glibc нет (но их и не было никогда в glibc).

Yaroslav Schekin
Не одинаковый, то-то и оно. Вот процитированный м...

postgres=# CREATE COLLATION "ru-RU-x-libc" ( locale = 'ru_RU', provider = "libc" ); CREATE COLLATION postgres=# CREATE COLLATION "en-US-x-libc" ( locale = 'en_US', provider = "libc" ); CREATE COLLATION postgres=# create table test2 ( a text COLLATE "ru-RU-x-libc", b text COLLATE "en-US-x-libc"); CREATE TABLE postgres=# insert into test2 values ('ё', 'ё'), ('Z', 'Z'), ('Щ', 'Щ'); INSERT 0 3 postgres=# select * from test order by a; a | b ---+--- ё | ё Щ | Щ Z | Z (3 rows) postgres=# select * from test order by b; a | b ---+--- Щ | Щ Z | Z ё | ё (3 rows)

Andrei-St Автор вопроса
Ilya Anfimov
Это ни о чём не говорит в общем-то. Ну, кроме того...

на ru_RU.UTF-8 аналогичная сотрировка, при создании таблицы я не указывал COLLATE

Andrei St
на ru_RU.UTF-8 аналогичная сотрировка, при создани...

Я про то, что glibc collation меняло кучу других букв -- й, украинское это Gzhe, в общем проверить без большого датасета вряд ли получится.

Роман Жарков
postgres=# CREATE COLLATION "ru-RU-x-libc" ( local...

А, перепутал селекты :) postgres=# select * from test2 order by a; a | b ---+--- Щ | Щ Z | Z ё | ё (3 rows) postgres=# select * from test2 order by b; a | b ---+--- Щ | Щ Z | Z ё | ё (3 rows)

Роман Жарков
Ага.

Выглядит как-то сломанно.

Ilya Anfimov
Выглядит как-то сломанно.

Я test забыл на test2 поменять, когда тыкал в истории select * (говорил же себе - дропай тестовое барахло сразу после использования!)

Ilya Anfimov
Более логично, но тожэ сломанно!

А теперь мне интересно, а что сломано-то?

Роман Жарков
Ага.

А вот то же самое не в windows (и не debian): https://www.db-fiddle.com/f/fsnTxAqMYatWfJChUGvozX/0 В общем, от системы это зависит, так что ещё пойди проверь, если нет доступа к FS.

Роман Жарков
А теперь мне интересно, а что сломано-то?

Русская-латинская-русская. Притом вторая русская явно меньшэ первой. Вообще что-то не представляю, какой там порядок.

Ilya Anfimov
Русская-латинская-русская. Притом вторая русская я...

test=# CREATE COLLATION "ru-RU-x-libc" ( locale = 'ru_RU', provider = "libc"); ERROR: encoding "UTF8" does not match locale "ru_RU" Это WSL под той же windows. А я думал, с ICU мороки много :)

Роман Жарков
test=# CREATE COLLATION "ru-RU-x-libc" ( locale = ...

wsl вообще не зависит от того, что "под windows". Только от дистрибутива (и какие библиотеки в нём лежат). Была бы убунта -- было бы как обычно всё.

Ilya Anfimov
wsl вообще не зависит от того, что "под windows". ...

Да я на всякий случай уточнил. Короче, icu при всех недостатках выглядит единообразнее.

Похожие вопросы

Обсуждают сегодня

А как старый хаскел с новым стыковать ? потому как тут работает https://play.haskell.org/saved/C3xpMzcd, а вот тут https://stepik.org/lesson/7602/step/9?unit=1473 нет ошибка C...
Fedor
131
что насчет пагинга? на осдеве непонятно(
Vi Chapmann 🪙
26
Вопрос я правильно понимаю что в коде newtype ArrowMap k v = ArrowMap { getArrowMap :: k -> Maybe v } getArrowMap есть функция типа k -> Maybe v, если да, то не понимаю задач...
Fedor
64
Ребят, что лучше для реверса: гидра или ида?
En Vind Av Sorg
26
Делаю велосипед логгер. К сообщению хочу прикрутить некоторую информацию, типа, кем отправлено, какой уровень, и всякое такое. И тут подумалось мне, почему бы не хранить весь...
Serjone
24
Как Вы считаете нормально ли в двадцатых годах 21 века в ВУЗах Российской Федерации обучать студентов работе с TASM? Не слишком ли это "архаично"? (Если оффтоп или флейм для э...
Spiker01
52
Всем привет! Использую gitlab-ci. Настроил gitlab-agent для деплоя в куб. При деплое проекта в логах такая ошибка: Executing deploy plan failed to watch "ns:my-project/Ingress...
Konstantin Moiseev
4
Комрады, хотел уточнить. Проперть в OnDestroy юнита-хозяина по-прежнему доступна? И еще уточнение: finalization юнита наступает раньше или позже OnDestroy?
Ed Doc
48
Продолжая диалог про свифт в проде – сейчас возник вопрос в активном наборе бекендеров. В основном в нашей компании мы фанаты Java Spring и полностью ей довольны. Однако найм ...
Guseyn
27
если загрузчик efi? если сама PML4 PDPT PDT PT лежит в неудобном для меня месте?
Vi Chapmann 🪙
8
Карта сайта