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

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

40 ответов

58 просмотров

Это системные 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 при всех недостатках выглядит единообразнее.

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

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

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта