热门标签 | HotTags
当前位置:  开发笔记 > 数据库 > 正文

数据库字符集和编码转换-mysql教程

数据库管理系统支持某种编码,主要涉及三个方面:数据库服务器支持。数据访问接口支持。客户端工具支持。1数据库服务器字符编码:数据库服务器支持某种编码,是指数据库服务器能够从客户端接收、存储以及向客户端提供该种编码的字符(包括标识符、字

数据库管理系统支持某种编码,主要涉及三个方面: 数据库服务器支持。 数据访问接口支持。 客户端工具支持。 1 数据库服务器字符编码 : 数据库服务器支持某种编码,是指数据库服务器能够从客户端接收、存储以及向客户端提供该种编码的字符(包括标识符、字

数据库管理系统支持某种编码,主要涉及三个方面:

数据库服务器支持。

数据访问接口支持。

客户端工具支持。

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平时遇到的问题

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

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

推荐阅读
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • Windows服务与数据库交互问题解析
    本文探讨了在Windows 10(64位)环境下开发的Windows服务,旨在定期向本地MS SQL Server (v.11)插入记录。尽管服务已成功安装并运行,但记录并未正确插入。我们将详细分析可能的原因及解决方案。 ... [详细]
  • 深入理解 SQL 视图、存储过程与事务
    本文详细介绍了SQL中的视图、存储过程和事务的概念及应用。视图为用户提供了一种灵活的数据查询方式,存储过程则封装了复杂的SQL逻辑,而事务确保了数据库操作的完整性和一致性。 ... [详细]
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • 网络攻防实战:从HTTP到HTTPS的演变
    本文通过一系列日记记录了从发现漏洞到逐步加强安全措施的过程,探讨了如何应对网络攻击并最终实现全面的安全防护。 ... [详细]
  • 本文深入探讨了Linux系统中网卡绑定(bonding)的七种工作模式。网卡绑定技术通过将多个物理网卡组合成一个逻辑网卡,实现网络冗余、带宽聚合和负载均衡,在生产环境中广泛应用。文章详细介绍了每种模式的特点、适用场景及配置方法。 ... [详细]
  • MySQL缓存机制深度解析
    本文详细探讨了MySQL的缓存机制,包括主从复制、读写分离以及缓存同步策略等内容。通过理解这些概念和技术,读者可以更好地优化数据库性能。 ... [详细]
  • 非公版RTX 3080显卡的革新与亮点
    本文深入探讨了图形显卡的进化历程,重点介绍了非公版RTX 3080显卡的技术特点和创新设计。 ... [详细]
  • 深入理解OAuth认证机制
    本文介绍了OAuth认证协议的核心概念及其工作原理。OAuth是一种开放标准,旨在为第三方应用提供安全的用户资源访问授权,同时确保用户的账户信息(如用户名和密码)不会暴露给第三方。 ... [详细]
  • 本文详细探讨了KMP算法中next数组的构建及其应用,重点分析了未改良和改良后的next数组在字符串匹配中的作用。通过具体实例和代码实现,帮助读者更好地理解KMP算法的核心原理。 ... [详细]
  • 深入解析Android自定义View面试题
    本文探讨了Android Launcher开发中自定义View的重要性,并通过一道经典的面试题,帮助开发者更好地理解自定义View的实现细节。文章不仅涵盖了基础知识,还提供了实际操作建议。 ... [详细]
  • Søren Kierkegaard famously stated that life can only be understood in retrospect but must be lived moving forward. This perspective delves into the intricate relationship between our lived experiences and our reflections on them. ... [详细]
  • 在使用SQL Server进行动态SQL查询时,如果遇到LIKE语句无法正确返回预期结果的情况,通常是因为参数传递方式不当。本文将详细探讨这一问题,并提供解决方案及相关的技术背景。 ... [详细]
  • 本文介绍如何通过创建替代插入触发器,使对视图的插入操作能够正确更新相关的基本表。涉及的表包括:飞机(Aircraft)、员工(Employee)和认证(Certification)。 ... [详细]
  • SQLite 动态创建多个表的需求在网络上有不少讨论,但很少有详细的解决方案。本文将介绍如何在 Qt 环境中使用 QString 类轻松实现 SQLite 表的动态创建,并提供详细的步骤和示例代码。 ... [详细]
author-avatar
平凡文学女
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有