postgre数据库字符集和编码转换
管理系统⽀持某种编码,主要涉及三个⽅⾯:
数据库服务器⽀持。
数据访问接⼝⽀持。url编码和utf8区别
客户端⼯具⽀持。
1 数据库服务器字符编码:
数据库服务器⽀持某种编码,是指数据库服务器能够从客户端接收、存储以及向客户端提供该种编码的字符(包括标识符、字符型字段值),并能将该种编码的字符转换到其它编码(如UTF-8编码转到GBK编码)。
1.1指定数据库服务器编码:
Postgresql:
创建数据库时指定:
CREATE DATABASE … ENCODING …
可以取ASCII、UTF-8、EUC_CN、……
1.2查看数据库编码
Postgresql:
show server_encoding
2 数据库访问接⼝编码
数据访问接⼝⽀持某种编码,该接⼝要做到能对该种编码的字符进⾏正确读写,不应出现数据丢失、数据失真等情况。
以JDBC接⼝为例:
JDBC接⼝⼀般根据JVM的ding设置client_encoding,set client_encoding to file_encoding。
将String转换成client_encoding编码的字节流,传给服务器端,原型Bytes(client_encoding) 。
收到服务器的字节流后,使⽤client_encoding构造String对象作为getString的返回值给应⽤程序,原型String(byte[], …, client_encoding)
3 客户端编码
客户端⼯具⽀持某种编码,必须能够显⽰从数据库读取的该种编码的字符,也能通过本⼯具将该种编码的字符提交到给服务器端。
3.1 Postgresql指定会话的客户端编码
SET CLIENT_ENCODING TO 'value'
3.2查看数据库编码
Show client_encoding
4 查看字符不同编码的⼆进制字符串
下⾯是⼏个字符在不同编码下数据库中的⼆进制存储串,Postgresql中Select decoding(name,’escape’) from test可以查看数据库服务器中⼆进制串。
4。1 以“贝钢”为例
GBK编码为:B1B4 B8D6
UTF-8编码为:E8B49D E992A2
GB18030编码为:B1B4 B8D6
4。2 以“”为例
GBK编码为:FE57 FE54
UTF-8编码为:EEA09C EEA099
GB18030编码为:8336C9388336C935
5 编码转换⽰例
下⾯通过具体的例⼦看⼀下,这个例⼦中客户端使⽤GBK/GB18030编码,接⼝两端使⽤GBK18030编码,数据库服务器使⽤UTF-8编码:
转换涉及:
应⽤程序中编码和连接客户端编码之间的转换
连接服务器端编码和数据库服务器编码之间的转换
在上图中以橙红⾊箭头表⽰
以“”为例,不同编码下在数据库服务器中的⼆进制串分别为:
GBK编码为:FE57 FE54
UTF-8编码为:EEA09C EEA099
GB18030编码为:8336C9388336C935
Socket:
编程接⼝保证发送给服务器端的字符编码和当前会话的client_encoding保持⼀致。
可以将client_encoding设成从应⽤程序获得的字符的当前编码
也可以获得当前会话的client_encoding,将从应⽤程序获得的字符转化成client_encoding设置的编码Server:
client_encoding和server_encoding 之间的转换
根据数据库编码转换转换,把⽬标编码中没有的做法转换成问号“”
6平时遇到的问题
对字符进⾏了错误的编码解析,导致出现乱码。
字符在两个字符集中都存在,导致这部分字符变成“”
转载⾃:blog.csdn/beiigang/article/details/7051605
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论