数据库字符集和编码转化ITeye - 乐橙lc8

数据库字符集和编码转化ITeye

2019年02月24日15时33分54秒 | 作者: 初兰 | 标签: 编码,数据库,字符 | 浏览: 113

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 以“”为例
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平常遇到的问题

对字符进行了过错的编码解析,导致呈现乱码。

字符在两个字符集中都存在,导致这部分字符变成“

 

 

 

版权声明
本文来源于网络,版权归原作者所有,其内容与观点不代表乐橙lc8立场。转载文章仅为传播更有价值的信息,如采编人员采编有误或者版权原因,请与我们联系,我们核实后立即修改或删除。

猜您喜欢的文章