postgresql, тип поля text и не utf-8 - как это работает?

Модератор: Модераторы разделов

azsx
Сообщения: 2731
ОС: calculate linux, debian, ubuntu

postgresql, тип поля text и не utf-8 - как это работает?

Сообщение azsx » 16.08.2015 13:32

Я скопировал wget'ом страницу в кодировке win-1251 в файл. Теперь через php хочу загнать эту страницу в бд в поле text. Внезапно, мне сперва надо привести эту страницу к utf 8 иначе выходит ошибка:
я в php поставил
setlocale (LC_ALL, "ru_RU.UTF-8");
header('Content-type: text/html; charset=UTF-8');
***
$znachenie = pg_escape_string($znachenie);
***
и ошибка не исчезает.
----
Как в text записывать значения в разных кодировках?
Спасибо сказали:

Аватара пользователя
Bizdelnick
Модератор
Сообщения: 15522
Статус: grammatikführer
ОС: Debian GNU/Linux

Re: postgresql, тип поля text и не utf-8 - как это работает?

Сообщение Bizdelnick » 16.08.2015 19:30

iconv -f cp1251 -t utf8 file > file.utf8
Пишите правильно:
в консоли
вкупе (с чем-либо)
в общем
вообще
в течение (часа)
команда
новичок
нюанс
приемлемо
проблема
пробовать
трафик
Спасибо сказали:

azsx
Сообщения: 2731
ОС: calculate linux, debian, ubuntu

Re: postgresql, тип поля text и не utf-8 - как это работает?

Сообщение azsx » 17.08.2015 01:41

Bizdelnick это моя беда, мне ее уже указвают. Проблема в том, что кодировка 1251 взята просто как пример. Я парсю главные страницы и robots.txt с мира, то есть не только рунет. 1. Очень сложные и малопонятные кодировки, например, просто указана кодировка jp. 2. Оказывается даже роботс далеко не всегда в utf-8.
Таким образом мне бы хотелось именно универсальное решение как заносить любые кодировки в базу, без ручного определения кодировки и конвертации.
Может проще этот вопрос решать так? Автоматическое преобразование кодировок
Спасибо сказали:

Аватара пользователя
Bizdelnick
Модератор
Сообщения: 15522
Статус: grammatikführer
ОС: Debian GNU/Linux

Re: postgresql, тип поля text и не utf-8 - как это работает?

Сообщение Bizdelnick » 17.08.2015 09:51

enconv -x utf8 <index.html >index.html.utf8
robots.txt всегда должен быть в ASCII (за исключением комментариев), так что его конвертировать не надо.
Пишите правильно:
в консоли
вкупе (с чем-либо)
в общем
вообще
в течение (часа)
команда
новичок
нюанс
приемлемо
проблема
пробовать
трафик
Спасибо сказали:

Аватара пользователя
s.xbatob
Сообщения: 748
ОС: RfRemix

Re: postgresql, тип поля text и не utf-8 - как это работает?

Сообщение s.xbatob » 17.08.2015 11:44

azsx писал(а):
16.08.2015 13:32
Как в text записывать значения в разных кодировках?

Никак!
Кодировка поля задаётся в свойствах таблицы. Текстовые поля при работе перекодируются из кодировки клиента и обратно.
Но вы можете установить любую кодировку сессии и менять её на лету. Только это - сомнительная практика, лучше текст перекодировать заранее. Есть библиотека iconv, есть привязки ко всем языкам, но что для этого есть в PHP - не знаю.
В крайнем случае установить тип поля BLOB и записывать туда без перекодировки.
Спасибо сказали:

azsx
Сообщения: 2731
ОС: calculate linux, debian, ubuntu

Re: postgresql, тип поля text и не utf-8 - как это работает?

Сообщение azsx » 17.08.2015 17:59

В крайнем случае установить тип поля BLOB и записывать туда без перекодировки.

как я понял bytea - это по сути blob в постгрес. Меня настораживает, что они советют чего то там экранировать. Далее мне не совсем понятно как физически задать это поле (надо указывать размер или как text). Еще - будет ли там работать поиск подстрок?
-----------
нет, всё таки bytea - это совсем не то что я хотел.
Спасибо сказали: