postgre数据库字符集和编码转换
2017-07-11 14:31
211 查看
数据库管理系统支持某种编码,主要涉及三个方面:
数据库服务器支持。
数据访问接口支持。
客户端工具支持。
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的file.encoding设置client_encoding,set client_encoding to file_encoding。
将String转换成client_encoding编码的字节流,传给服务器端,原型String.getBytes(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 以“
![](http://dl.iteye.com/upload/attachment/587080/0a72a528-a2f3-3d02-994c-3c391c422f0e.png)
”为例
GBK编码为:FE57 FE54
UTF-8编码为:EEA09C EEA099
GB18030编码为:8336C9388336C935
5 编码转换示例
下面通过具体的例子看一下,这个例子中客户端使用GBK/GB18030编码,接口两端使用GBK18030编码,数据库服务器使用UTF-8编码:
![](http://dl.iteye.com/upload/attachment/587090/6507601a-d3b8-317b-a59f-d1199e798327.png)
转换涉及:
应用程序中编码和连接客户端编码之间的转换
连接服务器端编码和数据库服务器编码之间的转换
在上图中以橙红色箭头表示
以“
![](http://dl.iteye.com/upload/attachment/587080/0a72a528-a2f3-3d02-994c-3c391c422f0e.png)
”为例,不同编码下在数据库服务器中的二进制串分别为:
GBK编码为:FE57 FE54
UTF-8编码为:EEA09C EEA099
GB18030编码为:8336C9388336C935
Socket:
编程接口保证发送给服务器端的字符编码和当前会话的client_encoding保持一致。
可以将client_encoding设成从应用程序获得的字符的当前编码
也可以获得当前会话的client_encoding,将从应用程序获得的字符转化成client_encoding设置的编码
Server:
client_encoding和server_encoding 之间的转换
根据数据库编码转换算法转换,把目标编码中没有的做法转换成问号“
![](http://dl.iteye.com/upload/attachment/587094/4b425289-3466-3b2e-ba0f-4e750e05d42c.png)
”
6平时遇到的问题
对字符进行了错误的编码解析,导致出现乱码。
字符在两个字符集中都存在,导致这部分字符变成“
![](http://dl.iteye.com/upload/attachment/587094/4b425289-3466-3b2e-ba0f-4e750e05d42c.png)
”
转载自:http://blog.csdn.net/beiigang/article/details/7051605
数据库服务器支持。
数据访问接口支持。
客户端工具支持。
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的file.encoding设置client_encoding,set client_encoding to file_encoding。
将String转换成client_encoding编码的字节流,传给服务器端,原型String.getBytes(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 以“
![](http://dl.iteye.com/upload/attachment/587080/0a72a528-a2f3-3d02-994c-3c391c422f0e.png)
”为例
GBK编码为:FE57 FE54
UTF-8编码为:EEA09C EEA099
GB18030编码为:8336C9388336C935
5 编码转换示例
下面通过具体的例子看一下,这个例子中客户端使用GBK/GB18030编码,接口两端使用GBK18030编码,数据库服务器使用UTF-8编码:
![](http://dl.iteye.com/upload/attachment/587090/6507601a-d3b8-317b-a59f-d1199e798327.png)
转换涉及:
应用程序中编码和连接客户端编码之间的转换
连接服务器端编码和数据库服务器编码之间的转换
在上图中以橙红色箭头表示
以“
![](http://dl.iteye.com/upload/attachment/587080/0a72a528-a2f3-3d02-994c-3c391c422f0e.png)
”为例,不同编码下在数据库服务器中的二进制串分别为:
GBK编码为:FE57 FE54
UTF-8编码为:EEA09C EEA099
GB18030编码为:8336C9388336C935
Socket:
编程接口保证发送给服务器端的字符编码和当前会话的client_encoding保持一致。
可以将client_encoding设成从应用程序获得的字符的当前编码
也可以获得当前会话的client_encoding,将从应用程序获得的字符转化成client_encoding设置的编码
Server:
client_encoding和server_encoding 之间的转换
根据数据库编码转换算法转换,把目标编码中没有的做法转换成问号“
![](http://dl.iteye.com/upload/attachment/587094/4b425289-3466-3b2e-ba0f-4e750e05d42c.png)
”
6平时遇到的问题
对字符进行了错误的编码解析,导致出现乱码。
字符在两个字符集中都存在,导致这部分字符变成“
![](http://dl.iteye.com/upload/attachment/587094/4b425289-3466-3b2e-ba0f-4e750e05d42c.png)
”
转载自:http://blog.csdn.net/beiigang/article/details/7051605
相关文章推荐
- 数据库字符集和编码转换
- 如何查看INFORMIX数据库的字符集呀
- 怎么样查看数据库字符集
- laravel 5.4 改变了默认的数据库字符集,现在utf8mb4包括存储emojis支持。如果你运行MySQL v5.7.7或者更高版本,则不需要做任何事情。 当你试着在一些MariaDB或者一
- 在oracle中,怎么新建一个字符集是utf8的数据库(即数据库实例)
- 建表时数据库建议使用 utf8mb4字符集
- java编码字符集及jdbc连接数据库指定字符集
- 详细介绍各种字符集编码转换问题 [转]
- 完整的解决oracle乱码shell处理(当每日导入数据库是英文字符集但需要导入中文字符集并且显示中文)
- 用例子详细介绍各种字符集编码转换问题(转)
- 多语言字符集和数据库(mysql)排序整理,其他数据库和网站等多语言环境也可参考
- Oracle 11g修改数据库字符集
- mysql主从数据库同步和字符集问题
- postgre数据库备份与恢复
- .NET操作postgre数据库的两种方式
- linux下字符集编码转换轻松实现
- PHP应用程序数据库编码转换(如GBK转UTF-8或UTF-8转GBK)注意事项
- mysql创建数据库,设置charset为utf8,并使用utf8_general_ci字符集校验结果
- oracle 10g 修改数据库字符集
- 数据库字符集问题...未完