Intereting Posts
Загрузите ошибку сценария php, перемещая изображение в папку Облицовка страницы в PDF с помощью MPDF Как создавать и хранить хэши паролей с помощью Blowfish в PHP PHP показывает только значимые (отличные от нуля) десятичные знаки Как я могу переопределить контроллер Magento? Заголовок не будет перенаправлен при передаче через ajax GET и POST на той же странице? Используя регулярные выражения для извлечения первого источника изображения из html-кодов? Как вызвать одну функцию контроллера в другом контроллере в codeigniter Как получить доступ к переменной PHP в JavaScript-коде? Поменяйте значение двух переменных без использования третьей переменной в php заменить теги на переменные PHP, используя preg_match есть ли способ отлаживать HTTP-запрос через приложение Android в eclipse? Array-Merge на ассоциативном массиве в PHP Как изменить корень документа в поведении веб-сервера?

Иностранные языки POSTGRES

У меня проблема с прямой вставкой в ​​базу данных иностранных символов, таких как символы «ó, č, ĕ, ř». не работает даже с моим php-интерфейсом, чтобы убедиться, что нет преобразования или другой кодировки. Таким образом, я использую вход в psql напрямую, и вот моя настройка:

server_encoding ----------------- UTF8 (1 row) 

а также

 client_encoding ----------------- UTF8 (1 row) 

база данных:

  Name | Owner | Encoding | Collate | Ctype | my_db | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | 

Поэтому я думаю, что проблем не должно быть.

Я создал это:

 CREATE TABLE test (a text); 

и теперь я хочу вставить какой-то текст

 INSERT INTO TEST (a) ('ó'); 

И есть сообщение:

 ERROR: invalid byte sequence for encoding "UTF8": 0xf327293b 

Есть ли кто-нибудь, кто может мне помочь? похоже, что он игнорировал мою кодировку ввода, или я действительно не знаю.

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

моя конфигурация терминала

 LANG=en_US.UTF-8 LANGUAGE=en_US:en LC_CTYPE="en_US.UTF-8" LC_NUMERIC="en_US.UTF-8" LC_TIME="en_US.UTF-8" LC_COLLATE="en_US.UTF-8" LC_MONETARY="en_US.UTF-8" LC_MESSAGES="en_US.UTF-8" LC_PAPER="en_US.UTF-8" LC_NAME="en_US.UTF-8" LC_ADDRESS="en_US.UTF-8" LC_TELEPHONE="en_US.UTF-8" LC_MEASUREMENT="en_US.UTF-8" LC_IDENTIFICATION="en_US.UTF-8" LC_ALL= 

EDIT2:

 my_db=# \encoding UTF8 

EDIT3: psql из файла

файл

 file -bi test text/plain; charset=utf-8 

выполнять

 ERROR: syntax error at or near "'Ăł'" LINE 1: INSERT INTO tes (a) ('Ăł'); 

EDIT4:

 set client_encoding='latin1'; 

это работает в psql, но мне нужно, чтобы он работал с utf8. Я знаю, что это возможно, я использовал эту настройку каждый раз с базами данных mysql, и это работает как шарм.

Для моего драйвера jdbc это UTF8.

EDIT5:

Вот что я делаю здесь: нажмите мне

Перед его сохранением я вижу его – так что php работает нормально, но после этого, когда я прочитал его из базы данных, я не вижу его. Это потому, что я приблизился к DB в psql, чтобы посмотреть, что происходит. Похоже, серверная проблема. Возможно ли, что сервер не может обрабатывать эти символы?

EDIT6:

Конфигурация Tomcat

  -Dfile.encoding=UTF8 

Кодировка URI также установлена ​​в UTF8. Где может быть эта проблема? 🙁

Если ваша оболочка находится в кодировке latin1, как видно из комментариев, это исправит ее:

 set client_encoding = 'latin1'; 

Если вы не хотите изменять системную кодировку клиента, вы можете изменить значение по умолчанию в postgresql.conf

 client_encoding = latin1 

Или измените кодировку символов по умолчанию PHP:

 default_charset = "utf-8"; 

Сделайте это также в Apache или любом другом сервере http, который вы используете, config:

 AddDefaultCharset UTF-8 

Еще один отладочный тест (я все еще думаю, что это конечная вещь): можете ли вы написать инструкцию insert в кодированном файле UTF-8 и попытаться запустить команду из файла? Например:

 psql my_db -U postgres -f <utf8-encoded-file> 

Если это хорошо работает, то оно возвращается к терминалу как-то …

Согласно комментариям, вы используете PuTTY, который по умолчанию используется для латинского-1. Вам нужно настроить PuTTY на использование UTF-8. Просто настройка локали сервера не принесет никакой пользы, если ваша кодировка PuTTY не соответствует тому, что заявляет окружающая среда.

Откройте PuTTy. Под заголовком «Настройки окна» выберите подменю «Перевод». Установите «Удаленный набор символов» на «utf-8». На вкладке Шрифты убедитесь, что вы используете шрифт с разумным охватом Unicode. Затем в меню сеанса введите имя в текстовое поле «сохраненные настройки» и введите «сохранить», чтобы сохранить настройки в качестве профиля. Вы можете переопределить профиль «Настройки по умолчанию», выбрав его и выбрав «Сохранить», но это повлияет на все будущие подключения и новые профили, поэтому может возникнуть путаница, если вы используете другие серверы, которые не являются utf-8.

(Эти инструкции основаны на моем PuTTY на Fedora 18, в некоторых версиях Windows могут быть некоторые различия в деталях пользовательского интерфейса. Если есть сомнения, найдите, как установить PuTTY для использования utf-8.)