Postgres客户端编码问题

  • 时间:
  • 浏览:1

四、实例

着实PG支持客户端和服务器端的编码自动转换,许多还不需要 遵从一有一个原则:本地环境的编码和客户端编码需一致。

1、PostgreSQL的数据库postgres,服务器端字符编码为utf8,客户端工具psql字符编码为GBK,本地环境dos命令编辑器编码为GBK,此时:

postgres=# show server_encoding;

转载 原文地址 ---https://www.cnblogs.com/winkey4986/p/6279243.html

(1)数据库服务器字符编码:

数据库服务器支持有一种编码,是指数据库服务器不需要 从客户端接收、存储以及向客户端提供该种编码的字符,不需要 将该种编码的字符转换到其它编码。

查看PostgreSQL数据库服务器端编码:

postgres=# show server_encoding;

数据库编程的编码大什么的问题

数据库编程设计的编码大什么的问题包括一有一个方面:

3、本地环境许多指此时使用的环境,起初我使用powercmd代替windows的cmd命令行工具,实现上端第一有一个实例是老是失败(乱码)。

原困许多,此时本地环境编码是指powercmd的编码,而都是执行chcp命令得到的编码。

而powercmd使用的编码究竟是哪些,我也这样 找到。

2、PostgreSQL的数据库postgres,服务器端字符编码为utf8,客户端工具psql字符编码为utf8,本地环境dos命令编辑器编码为GBK,此时:

postgres=# set client_encoding to 'utf8';

SET

postgres=# insert into test values('测试1');

閿欒?: 鏃犳晥鐨?"UTF8" 缂栫爜瀛楄妭椤哄簭: 0xb2

postgres=# select * from test;

UTF8

postgres=# l

名称 | 拥有者 | 字元编码 | Collate | Ctype | TestDb1 | TestRole1 | UTF8 | Chinese (Simplified)_People's Republic of China.936 | Chinese (Simplified)_People's Republic of China.936 |

TestDb2 | postgres | UTF8 | Chinese (Simplified)_People's Republic of China.936 | Chinese (Simplified)_People's Republic of China.936 |

postgres | postgres | UTF8 | Chinese (Simplified)_People's Republic of China.936 | Chinese (Simplified)_People's Republic of China.936 |

template0 | postgres | UTF8 | Chinese (Simplified)_People's Republic of China.936 | Chinese (Simplified)_People's Republic of China.936 |

(2)数据库客户端字符编码:

客户端工具支持有一种编码,不需要 不需要 显示从数据库读取的该种编码的字符,不需要 通过本工具将该种编码的字符提交到给服务器端。

查看PostgreSQL客户端工具psql编码:

postgres=# show client_encoding;

GBK

postgres=# encoding

GBK

指定Postgresql会话的客户端编码:

postgres=# set client_encoding to 'utf8';

SET

postgres=# show client_encoding;

GBK

(1 行记录)

postgres=# ! chcp

活动代码页: 936

postgres=# select * from "TestTb1";

   ②使用“i sql文件.sql”(sql文件是utf8编码)命令的日后,不可能 sql文件带有中文,一定要先行执行set client_encoding=utf8;(设置此日后,按照上端说的,客户端不转换,直接把接收的字符作为utf8编码传给服务器端,而文件有一种许多utf8,好多好多 不乱码;同理不可能 sql文件是ansi编码即gbk编码句子,确保client_encoding为gbk;总之,sql文件与client_encoding编码一致),才不乱码。转载

总结:①直接在psql执行insert不可能 select的日后,设置client_encoding=gbk(默认),不乱码;(上端例子证明了)

娴嬭瘯

(1 行记录)

不可能 客户端和服务器的编码一致,故不进行转码,

insert时,本地输入的GBK编码到客户端不自动转换,客户端把接收的字符作为utf编码传给服务器端不转换,GBK的编码作为UTF-8存储,故有大什么的问题。

报错的信息为:ERROR: invalid byte sequence for encoding "UTF8": 0xb2;

select时,服务端的utf编码传给客户端不转换,客户端把utf编码传给本地环境不自动转换,utf8编码用gbk编码显示,故有大什么的问题。

测试

11

不可能 本地环境和客户端编码都是GBK,一致,这样 大什么的问题;

insert时,客户端接收本地环境输入的GBK字符(两者都为GBK),客户端传到服务器端时自动转换为UTF-8编码存储,这样 大什么的问题;

select时,服务器端传到客户端,UTF-8编码自动转换为GBK编码,在本地环境显示时,本地环境许多GBK编码,显示这样 大什么的问题。

UTF8

(1 行记录)

postgres=# show client_encoding;

UTF8

(3)本地环境编码:

不可能 使用dos的命令行界面,本地环境许多指dos命令行环境的编码,可以使用dos命令chcp查看dos环境编码:

D:Program FilesPowerCmd>chcp

活动代码页: 936

----936为简体中文,GBK;

不可能 在使用有一种编辑器,则本地环境编码取该编辑器的编码设置。