powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / кодировка SQL_ASCII для русских букв
9 сообщений из 9, страница 1 из 1
кодировка SQL_ASCII для русских букв
    #39724990
trom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Нужно перенести базу данных на новый сервер

Создаю БД Postgres через панель vestacp
Ставиться PostgreSQL 9.2.24
Кодировка по умолчанию встает SQL_ASCII
Collation С
Character Type С

На старом сервере было
UTF8
ru_RU.UTF-8
ru_RU.UTF-8

Сделал экспорт всей базы и структуры со старого сервера в формате sql и потом восстановил бекап на новом
все русские буквы остались, делаю новые записи в бд с русским все ок.

Какие проблемы могут быть с кодировкой SQL_ASCII если работаю с русскими буквами ?
Или может SQL_ASCII какая то универсальная кодировка ?
...
Рейтинг: 0 / 0
кодировка SQL_ASCII для русских букв
    #39725057
Павел Лузанов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
trom,

SQL_ASCII это 7-битная кодировка ничего не знающая про кириллицу.
Поэтому проблема с ней простая - с русскими буквами она не работает.

Что такое vestacp не знаю, но нужно заново инициализировать БД.
...
Рейтинг: 0 / 0
кодировка SQL_ASCII для русских букв
    #39725186
trom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Павел Лузанов,

А почему русские буквы из БД при кодировке SQL_ASCII отображаются нормально ?
...
Рейтинг: 0 / 0
кодировка SQL_ASCII для русских букв
    #39725278
Павел Лузанов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
trom,

Согласно документации :
"Поведение кодировки SQL_ASCII существенно отличается от других. Когда набором символов сервера является SQL_ASCII, сервер интерпретирует значения от 0 до 127 байт согласно кодировке ASCII, тогда как значения от 128 до 255 воспринимаются как незначимые. Перекодировка не будет выполнена при выборе SQL_ASCII. Таким образом, этот вариант является не столько объявлением того, что используется определённая кодировка, сколько объявлением того, что кодировка игнорируется. В большинстве случаев, если вы работаете с любыми данными, отличными от ASCII, не стоит использовать SQL_ASCII, так как PostgreSQL не сможет преобразовать или проверить символы, отличные от ASCII. "

Т.е. получается, что если клиенты, работающие в разных кодировках кириллицы(win1251, koi8r, iso8859p5 и пр), захотят работать с вашей бд, то для них не будет выполняться перекодировка символов.

Кроме того, что показывает вот такой запрос?
Код: sql
1.
SELECT upper('абвгдеёжз');
...
Рейтинг: 0 / 0
кодировка SQL_ASCII для русских букв
    #39725311
trom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Павел Лузанов,
БД с SQL_ASCII
показывает

upper
абвгдеёжз

то есть без изменений
...
Рейтинг: 0 / 0
кодировка SQL_ASCII для русских букв
    #39725322
Павел Лузанов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
trom,

Это из-за lc_ctype=C. Не понимает "оно" где маленькие буквы, где большие.
А поскольку lc_collate тоже 'С', то еще сортировка русских букв может быть не верной.
А выбранная кодировка не дает возможности перекодировать символы между разными кодировками.

Не вижу причин это терпеть. Создавайте как и на старом сервере: ru_RU.UTF8
...
Рейтинг: 0 / 0
кодировка SQL_ASCII для русских букв
    #39725407
trom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Павел Лузанов,

старый сервер ставил года два назад не помню как я это решал

нашел в инете
sudo -u postgres psql

postgres=# UPDATE pg_database SET datistemplate = FALSE WHERE datname = 'template1';
postgres=# DROP DATABASE Template1;
postgres=# CREATE DATABASE template1 WITH owner=postgres ENCODING = 'UTF-8' lc_collate = 'ru_RU.UTF-8' lc_ctype = 'ru_RU.UTF-8' template template0;
postgres=# UPDATE pg_database SET datistemplate = TRUE WHERE datname = 'template1';

вроде на новых базах по дефолту теперь русская кодировка, но на старой базе у меня на всех базах даже дефолтных типо admin_db и postgres стояла русская как это сделать ? и нужно ли ?
могут быть какие то проблемы если рабочие базы имеют UTF-8 а дефолтные SQL_ASCII ?
...
Рейтинг: 0 / 0
кодировка SQL_ASCII для русских букв
    #39725517
Ы2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tromстарый сервер ставил года два назад не помню как я это решал
initdb --help
...
Рейтинг: 0 / 0
кодировка SQL_ASCII для русских букв
    #39725650
Павел Лузанов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
trom,

Я бы полностью переустановил PostgreSQL.
Причем начал бы разбираться почему ставится версия 9.2, которая уже не поддерживается.
В настоящий момент нужно ставить 10, ну хотя бы 9.6. Меньше нет смысла.

Как уже подсказали, инициализация кластера (первичное создание баз данных) выполняется утилитой initdb.
Нужно, чтобы во время её запуска в окружении пользователя ОС была русская локаль (или использовать ключи утилиты для явного задания).

Оставлять как есть - часть баз C.SQL_ANSII, а часть ru_RU.UTF8 - выглядит неаккуратно, даже если проблем не будет.
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / кодировка SQL_ASCII для русских букв
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]