字符编码修正系统及方法技术方案

技术编号:9618418 阅读:108 留言:0更新日期:2014-01-30 06:16
本发明专利技术涉及互联网技术领域,公开了一种字符编码修正系统,包括:数据库连接取出单元,适于接收客户端的SQL语句,从连接池中取出数据库连接;数据库访问单元,适于在使得所述数据库连接的当前字符编码状态与预先保存的所述客户端当前字符编码状态相同时,所述客户端根据所述数据库连接访问数据库;数据库连接释放单元,适于在执行完所述SQL语句后释放所述数据库连接至所述连接池。本发明专利技术还公开了一种字符编码修正方法。本发明专利技术能够使得客户端在其字符编码状态与数据库连接的字符编码状态相同时访问数据库,并在执行完当前的SQL语句后立即释放该数据库连接,达到了既能避免字符编码不一致导致的乱码,又能保证连接池内所有连接的有效复用的有益效果。

Character encoding correcting system and method

The invention relates to the technical field of Internet, discloses a character encoding system, including: database connection removal unit, for receiving the client SQL statements, and out of the database connection from the connection pool; database access unit adapted for connection to the database of the current state and character encoding pre stored by the client, the current character encoding the same condition, the client according to the database connection database; database connection release unit, for executing the SQL statement after the release of the database connection to the connection pool. The invention also discloses a character encoding correction method. Access to the database character encoding state and the invention can make the client connection in the state of character encoding and database is the same, and in executing the SQL statement immediately after the current release of the database connection, can not only avoid the inconsistency of character encoding code, and can guarantee the beneficial effect of connecting all connections in the pool of effective reuse.

【技术实现步骤摘要】

本专利技术涉及互联网
,具体涉及一种。
技术介绍
MySQL数据库的数据存储也支持多种字符编码(字符编码:为了用二进制表示各种字母、文字、符号等,人们制定了各种字符编码方式,通过各种事先定义好的二进制串来表示各个字符。信息的读出和写入必须使用相同的编码方式,才不会造成乱码,如GB2312用两个字节表示一个汉字,而UTF-8用三个字节表示一个汉字,如果写入一个用GB2312编码的汉字,读出后再用UTF-8编码去解析,就只能得到错误的结果),如:GBK、UTF-8等。为此MySQL专门提供了设置字符编码的语句:SET NAMES,如SET NAMES GBK,就将当前的字符编码设置成了 GBK,之后的读写都按照GBK编码进行。字符编码状态是与数据库连接绑定的,也就是说,在多个连接上设置的不同编码互不影响。例如:两个客户端,分别连接到同一台MySQL数据库服务器,然后分别执行SETNAMES GBK和SET NAMES UTF8,之后两个客户端分别以GBK和UTF-8编码来读写数据,互不冲突。在没有连接池(每一次数据访问请求都必须经历建立数据库连接、打开数据库、存取数据和关闭数据库连接等步骤,而连接并打开数据库是一件既消耗资源又费时的工作,如果频繁发生这种数据库操作,系统的性能必然会急剧下降。数据库连接池技术是在存取数据操作完成后,并不关闭数据库连接,而是将其存储起来,下个数据库请求就可以直接使用这个连接,通过复用已建立的数据库连接,极大地节省系统资源和时间)时,每个客户端建立一个到MySQL的连接并独占该连接,客户端一在自己的连接上执行SET NAMES语句不会影响到客户端二的连接上的编码状态。而在引入连接池后,问题变得有些复杂,因为现在客户端不再独占一个连接,而是每执行完一条SQL语句,所使用过的连接就被放回连接池,一个客户端要执行下一条SQL语句,连接池再取出一个建立好的连接给其使用。换句话说,同一个客户端执行的多条SQL语句所使用的连接不一定是同一个,而是每执行完一条语句,连接就被更换。这样做目的是为了连接池内的连接可以被有效复用,提升连接的整体利用效率。但由于字符编码的状态与连接绑定,因此客户端一在执行某条SQL语句时使用的很可能是客户端二执行过SET NAMES语句的连接,这样就会导致客户端一错误地使用UTF-8编码去读写GBK编码的数据,后果就是乱码。现有技术中,一种防止出现乱码的解决方案是部分取消连接的复用,即一个客户端在运行期间独占一个连接,直到该客户端退出后,它占用的连接才被放回连接池。因为在这个客户端运行期间包括SET NAMES在内的所有SQL语句都在同一个连接上执行,因此可以保证字符编码的统一,避免出现乱码的情况。显然上述解决方案的缺点是连接的复用度大大降低。每个客户端在运行期间除了执行SQL语句还会处理其他逻辑,也就是说执行两条SQL语句之间存在一定的时间间隔,如果是完全复用连接类型的连接池,在该间隔内这个客户端占用的连接就会被放回连接池供其他客户端使用,而在上述解决方案的架构中,该连接得不到利用,只能被该客户端占用不放。只有在该客户端退出后其占用的连接才能被其他客户端使用。
技术实现思路
鉴于上述问题,提出了本专利技术以便提供一种克服上述问题或者至少部分地解决上述问题的。依据本专利技术的一个方面,提供了一种字符编码修正系统,包括:数据库连接取出单元,适于接收客户端的SQL语句,从连接池中取出数据库连接;数据库访问单元,适于在使得所述数据库连接的当前字符编码状态与预先保存的所述客户端当前字符编码状态相同时,所述客户端根据所述数据库连接访问数据库;数据库连接释放单元,适于在执行完所述SQL语句后释放所述数据库连接至所述连接池。可选地,所述数据库访问单元进一步包括:字符编码状态设置单元,适于在所述SQL语句包括设置字符编码的语句时,设置所述数据库连接的当前字符编码状态为所述SQL语句中的字符编码;字符编码状态更新单元,适于更新预先保存的所述客户端当前字符编码状态为所述SQL语句中的字符编码;SQL语句发送单元,适于将所述SQL语句通过所述数据库连接发送到所述数据库,以使所述客户端访问所述数据库。可选地,所述数据库访问单元进一步包括:SQL语句发送单元,适于在所述SQL语句不包括设置字符编码的语句,且取出的所述数据库连接的当前字符编码状态与预先保存的所述客户端当前字符编码状态相同时,将所述SQL语句通过所述数据库连接发送到所述数据库,以使所述客户端访问所述数据库。可选地,所述数据库访问单元进一步包括:SQL语句插入单元,适于在所述SQL语句不包括设置字符编码的语句,且取出的所述数据库连接的当前字符编码状态与预先保存的所述客户端当前字符编码状态不相同时,在所述SQL语句前插入设置字符编码的语句,以形成新的SQL语句;SQL语句发送单元,适于将所述新的SQL语句通过所述数据库连接发送到所述数据库,以使所述客户端访问所述数据库。可选地,通过关系映射表保存所述客户端及所述客户端当前字符编码状态。根据本专利技术的另一方面,提供了一种字符编码修正方法,包括步骤:接收客户端的SQL语句,从连接池中取出数据库连接;在使得所述数据库连接的当前字符编码状态与预先保存的所述客户端当前字符编码状态相同时,所述客户端根据所述数据库连接访问数据库;在执行完所述SQL语句后释放所述数据库连接至所述连接池。可选地,所述在使得所述数据库连接的当前字符编码状态与预先保存的所述客户端当前字符编码状态相同时,所述客户端根据所述数据库连接访问数据库进一步包括:在所述SQL语句包括设置字符编码的语句时,设置所述数据库连接的当前字符编码状态为所述SQL语句中的字符编码;更新预先保存的所述客户端当前字符编码状态为所述SQL语句中的字符编码;将所述SQL语句通过所述数据库连接发送到所述数据库,以使所述客户端访问所述数据库。可选地,所述在使得所述数据库连接的当前字符编码状态与预先保存的所述客户端当前字符编码状态相同时,所述客户端根据所述数据库连接访问数据库进一步包括:在所述SQL语句不包括设置字符编码的语句,且取出的所述数据库连接的当前字符编码状态与预先保存的所述客户端当前字符编码状态相同时,将所述SQL语句通过所述数据库连接发送到所述数据库,以使所述客户端访问所述数据库。可选地,所述在使得所述数据库连接的当前字符编码状态与预先保存的所述客户端当前字符编码状态相同时,所述客户端根据所述数据库连接访问数据库进一步包括:在所述SQL语句不包括设置字符编码的语句,且取出的所述数据库连接的当前字符编码状态与预先保存的所述客户端当前字符编码状态不相同时,在所述SQL语句前插入设置字符编码的语句,以形成新的SQL语句;将所述新的SQL语句通过所述数据库连接发送到所述数据库,以使所述客户端访问所述数据库。可选地,通过关系映射表保存所述客户端及所述客户端当前字符编码状态。根据本专利技术的,能够使得客户端在其字符编码状态与数据库连接的字符编码状态相同时访问数据库,并在执行完当前的SQL语句后立即释放该数据库连接,由此解决了的现有技术中为了避免出现乱码,而使数据库连接的复用度大大降低的问题,取得了既能避免字符编码不一致导致的乱码,又能保证连接本文档来自技高网
...
<a href="http://www.xjishu.com/zhuanli/55/201310511883.html" title="字符编码修正系统及方法原文来自X技术">字符编码修正系统及方法</a>

【技术保护点】
一种字符编码修正系统,其包括步骤:数据库连接取出单元,适于接收客户端的SQL语句,从连接池中取出数据库连接;数据库访问单元,适于在使得所述数据库连接的当前字符编码状态与预先保存的所述客户端当前字符编码状态相同时,所述客户端根据所述数据库连接访问数据库;数据库连接释放单元,适于在执行完所述SQL语句后释放所述数据库连接至所述连接池。

【技术特征摘要】
1.一种字符编码修正系统,其包括步骤: 数据库连接取出单元,适于接收客户端的SQL语句,从连接池中取出数据库连接; 数据库访问单元,适于在使得所述数据库连接的当前字符编码状态与预先保存的所述客户端当前字符编码状态相同时,所述客户端根据所述数据库连接访问数据库; 数据库连接释放单元,适于在执行完所述SQL语句后释放所述数据库连接至所述连接池。2.如权利要求1所述的字符编码修正系统,其中,所述数据库访问单元进一步包括: 字符编码状态设置单元,适于在所述SQL语句包括设置字符编码的语句时,设置所述数据库连接的当前字符编码状态为所述SQL语句中的字符编码; 字符编码状态更新单元,适于更新预先保存的所述客户端当前字符编码状态为所述SQL语句中的字符编码; SQL语句发送单元,适于将所述SQL语句通过所述数据库连接发送到所述数据库,以使所述客户端访问所述数据库。3.如权利要求1所述的字符编码修正系统,其中,所述数据库访问单元进一步包括: SQL语句发送单元,适于在所述SQL语句不包括设置字符编码的语句,且取出的所述数据库连接的当前字符编码状态与预先保存的所述客户端当前字符编码状态相同时,将所述SQL语句通过所述数据库连接发送到所述数据库,以使所述客户端访问所述数据库。4.如权利要求1所述的字符编码修正系统,其中,所述数据库访问单元进一步包括: SQL语句插入单元,适于在所述SQL语句不包括设置字符编码的语句,且取出的所述数据库连接的当前字符编码状态与预先保存的所述客户端当前字符编码状态不相同时,在所述SQL语句前插入设置字符编码的语句,以形成新的SQL语句; SQL语句发送单元,适于将所述新的SQL语句通过所述数据库连接发送到所述数据库,以使所述客户端访问所述数据库。5.如权利要求1~4中任一项所述的字符编码修正系统,其中,通过关系映射表保存所述客户端及所述客户端当前字符编码状态。6.一种字符编码修正方法,其包括步骤: 接收客户端的S...

【专利技术属性】
技术研发人员:朱超陈飞代兵王超
申请(专利权)人:北京奇虎科技有限公司奇智软件北京有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1