How to set Client_Encoding - postgresql

I'm using NodeJS to get some data from a PostgreSQL database and render it on the web. When I make a query on SQL Shell(psql) everything looks fine but when I console.log that same data from NodeJS, all the special characters are replaced with gibberish.
The encoding for this database is
- Encoding: UTF8
- Collation: French_France.1252
- Ctype: French_France.1252
I tried to set Client_Encoding to UTF8 but when I reconnect to the database I find out that it is still not set.
Also I get this warning each time I connect to the database (Just in case it may cause smth)
WARNING: Console code page (850) differs from Windows code page (1252)
8-bit characters might not work correctly. See psql reference
page "Notes for Windows users" for details.
My OS is Windows 8 and PostgreSQL version is 10.x.

After a long search I have found a solution that I want to share now.
Change your ODBC DSN connection string to include this: ConnSettings=SET CLIENT_ENCODING TO 'UTF8';

Related

Azure database for postgreSQL Flexible Server and Entity Framework Core shows accented spanish words incorrectly

I have created a Flexible Server (Azure database for postgreSQL), I am using pgadmin to connect to this database (Encoding UTF8), I have a table named skills, and using pgadmin shows the spanish words correctly.
SHOW SERVER_ENCODING;
UTF8
SHOW CLIENT_ENCODING;
SQL_ASCII
The problem is when I connect entity framework core to this database, shows accented spanish words incorrectly, for example:
Publicación (Correct)
Publicaci\xf3n (Incorrect)
When I send data from Web API to database it is inserted this way
Publicación
There is an option in Azure Database for PostgreSQL flexible server is Server Parameters,
Inside there is a parameter:
client_encoding was SQL_ASCII and I changed to UTF8
then my pgadmin shows accented spanish words correctly, that was the solution

PgAdmin III, opening server status gives "invalid byte sequence for encoding UTF8"

I have two Postgres 9.3 servers in synchronous replication.
I had needed to restart the slave in order to load a new archive_cleanup_command in the recovery.conf.
The server restarted correctly and it's now perfectly in sync with the master server.
But when I open "Server status" panel for the slave server in PgAdmin III (which executable is located on the master server), I get some errors like this:
invalid byte sequence for encoding “UTF8” plus some hex codes
It might be because I put a tilde ~ in the archive_cleanup_command, but it didn't worked, then I removed it and the command worked correctly.
Maybe that ~ has been written somewhere and it's not a valid char... but I also deleted logs...
Log of the slave server has a lot of lines like the followings:
2015-02-13 11:11:32 CET ERROR: invalid byte sequence for encoding “UTF8”: 0xe8 0x20 0x73
2015-02-13 11:11:32 CET STATEMENT: SELECT pg_file_read('pg_log/postgresql-2015-02-13_111038.log', 0, 50000)
Note that postgresql-2015-02-13_111038.log is the last log, the one from which I got these lines.
The problem you have is that the locale setting lc_messages is set to an encoding that is different to the encoding of the database(s). As a result, some messages are being written into the log using Windows-1252 encoding, while when you try to use PgAdmin to view the log, it tries to interpret the file using UTF-8. Some of the byte sequences written in the log are not valid UTF-8, leading to the error.
In fact, the way in which different locales interact in postgresql can result in mixed encodings in the log file. There is a Bug Report on this, but it does not look like it has been resolved.
Probably the easiest way to resolve this is to set lc_messages to English_United States.UTF-8.
It would also be preferable to have lc_messages aligned across all of the databases on the server (or at least all using the same encoding).
Be sure to remove any existing log files as they will already contain the incorrect encoding.
It is due to your postgresql.log corrupted as stated in the statement 'select pf_file_read ....'.
If you do a "touch" (after a backup of your log perhaps) on you server log, and reconnect, you'll not see this unicode error anymore and thus, you'll be able to use pgadmin III furthermore.

Retrieve multilingual data (Chinese, Japanese...) from SQL Server 2008 R2 and display in Java webapp

I have Chinese data in my db and I need to display it in my Java web app. However I am getting ??? as output.
Database Used: SQL Server 2008 R2 (nvarchar datatype is used in order to support Unicode data and db is created with default collation name i.e. SQL_Latin1_General_CP1_CI_AS and there is no problem while storing the data in db).
Development Environment: Window 7
Treegrid is used to display data.
I have already:
1. set charset and pageEncoding to UTF-8 in my HTML, jsp and Java
pages.
2. Updated my jdbc connection with useUnicode=true;characterEncoding=UTF-8;.
3. Configured Tomcat’s server.xml connector to use UTF-8 (URIEncoding="UTF-8").
I have once set collation_name to Latin1_General_CI_AI still it's not working.
Latin1_General_CI_AI --> There's part of your problem. Latin1 has nothing to do with Unicode. Getting "???" means there's an encoding problem somewhere in your toolchain, where your UTF-8 data gets scrambled into another encoding.

MySQL Dump and Import not preserving encoding?

I am trying to copy a table from on MySQL database on a remote machine to another MySQL database on my local machine. I noticed that after importing the dump to my local machine, there were characters like ’ instead of single quotes.
I assumed this was an encoding issue, so I went into both databases and ran show create table posts, near the end of both, I saw CHARSET=utf8. Also, I ran file -i on the dump file, both before and after scping it to my local machine, and they were both utf8.
However, when I import this file, I get this before:
attendees—policy makers,
and after:
attendees—policy makers,
I am not sure why this is happening, everything is using utf8, what am I missing?
EDIT: I am using mysql Ver 14.12 Distrib 5.0.75, for debian-linux-gnu (x86_64) remotely, and mysql Ver 14.14 Distrib 5.5.25a, for osx10.7 (i386) locally.
On both systems you must check that your connection encoding is correct:
SHOW VARIABLES LIKE 'character_set_%'
Usually seeing characters like that is the result of double-encoding. Make sure you can match up the connection and client encoding to be exactly the same. There is a number of command line options that can facilitate this, or if you're using a driver or client, something in there can tweak it.

ODBC Call failure from Microsoft Access to PostgreSQL -Client Encoding Mismatch

i tried to create a linked table from Microsoft Access (2007) to PostgreSQL (9.0) in Windows 7. When I tried to linked table as follows:
1)Select link to the data source by creating a linked table
2)Machine Data Source in 'Selectr Data Source' pop up.
3)Select the PostgreSQL DB visible which ends in error:
ODBC call failed
Clientencoding mismatch(#214).
Could you please help?
I used Google to find this.
It seems that there is some problem with PostgreSQL 8.1 and the encoding names: see this post or google. It looks that UTF8 used by default with the new Postgres is not compatible with old ODBC drivers. I am not sure where the problem really is, but a quick fix is to change default encoding for the user connecting to the database:
alter user <user> SET client_encoding to LATIN1;