Java 与 mysql 中文问题的处理

芯片硅前验证技术与驱动工程师实战指南 硅前验证是芯片开发流程中的关键环节,通过pre-silicon simulation等技术手段在流片前验证设计正确性。其核心技术包括软件仿真、FPGA原型验证和硬件仿真器解决方案,涉及Linux驱动开发、芯片架构理解和波形分析等核心技能。作为连接芯片设计与系统集成的桥梁,硅前验证能早期发现设计缺陷,节省数百万美元流片成本。以Cadence Palladium为代表的硬件仿真器,通过专用服务器系统实现比纯软件方案快100-1000倍的仿真速度,为驱动工程师提供完整的外设模型验证环境。掌握硅前验证技术可显著提升 阅读详情
Java 与 mysql 中文问题的处理
作者: 发文时间:2006.06.05 来源:优快云
【Java专区】  【安全专区】  【网管专区】  【linux专区】  【进入论坛】  【IT博客】 

width="365" scrolling="no" height="300" frameborder="0" align="left" marginwidth="0" marginheight="0" src="http://tech.ccidnet.com/pub/html/tech_pip2.html">

 

 

 

 

 

 

 

 

我的环境:

中文简体 win2000 pro + sp3

mysql server 4.0.12

j2sdk 1.4.01

connetcor-j 3.0.7

问题:用 jdbc 插入、读取数据库种文字串乱码。

首先,mysql 数据库中的东西都是二进制存放的,支持任何数据,当然包括中文。你到命令行下

insert into testtable values ( '中文' );

select * from testtable;

全都显示正常。

但是,虽然存取中文没问题,但排序、匹配的时候有问题。所以如果你的数据库里有中文的话,记得在配置文件中,如 c:/winnt/my.ini 中的 [mysqld] 里添加一行:

default-character-set=gbk

然后重启 mysql server 。 注意 gbk 要小写,不然 mysqld 启动不了。

其次,数据库没问题,下面看看 java 程序。在程序里很无聊地加一句调试语句:

out.println("中文");

也显示正常,说明整个 java 环境没问题。

所以,当然是联系 java 和 mysql 的部分,mysql jdbc driver 出问题了。

分析一下,java 内部使用 unicode ,而 mysql 缺省使用 iso-8xxx(忘了),所以 jdbc driver 把查询字符串传给 mysql server 时,会做 unicode->iso-8xxx 的转换,从 mysql server 接受结果时,会做 iso-8xxx->unicode 的转换。(在屏幕上显示结果时会 unicode->GBK,不过不关这里的事。)

这就有问题了,我在命令行下插入数据库的中文字符串是 GBK (这是简体中文 windows 的默认),所以 jdbc driver 接受查询结果时,应该做 GBK->unicode 的转换才对。

验证一下,对从数据库中读出的中文字串 s ,

new String( s.getByte("iso-8xxx"), "gbk" )

将 s 先做一个 unicode->iso-8xxx 转换成它存放在数据库中的原始模样。我们知道它是 gbk ,所以手工来 gbk->unicode ,这样 java 程序就显式正常了。

类似,写入数据库的时候,我们期待 jdbc driver 会把 unicode->gbk ,结果却是 unicode->iso-8xxx ,当然是乱码了。

有很多文章,就到此为止,并告诉我们:要解决中文问题,自己手工转码吧。

这实在是不负责任。如果每一个字符串都要手工转码,说明程序设计出了问题。

想一想,写 mysql jdbc driver 的家伙会连转码都不知道?

所以我看看 connector-j-3.0.7 里面的 readme, 找到一个解决方案:

connection = DriverManager.getConnection( "jdbc:mysql://localhost/test?user=root&password=&useUnicode=true&characterEncoding=GBK" );

这是告诉 jdbc driver 强制按指定参数转码

其实还是有问题。如果 mysql server 一定得用 iso-8xxx ,那就只有用上一个办法了。但我记得我的 mysql 是 gbk ,不是都改过 my.ini 了吗? jdbc driver 怎么都不自动探测 mysql server 的字符集呢?

这个时候就看到开放源码的好处了 :-) connector-j-3.0.7 源码中确实有代码读取 mysql server 的信息,包括字符集。从注释中知道,

作者为 unicode 转换到单字节字符集写了自己的转换函数,并号称比 jvm 的快百分之多少多少。所以代码中有一段,判段数据库如果使用的是单字节就调用自己的转换函数。但这段代码后面就忘了把多字节字符集交给 jvm 去转换了,所以变成了缺省的 iso-8xxx 转换。

我的修改方式: com/mysql/jdbc/Connecter.java 这个文件的 1969 行,

this.doUnicode = true; // force the issue

将之上移四行到 1964 行,放在下面这一行的前面:

try {

用这份代码重新编出来的 jdbc driver ,你的 java 访问数据库的程序不用做任何修改就可以正确读写中文了,不过要记得 mysql server 要 default-character-set=gbk

我使用它测试了几个小程序,中文都显示正常,而且都没死机、异常。呵呵,自我感觉很好。





赛迪网JAVA专区,JAVA开发者乐园!

赛迪网IT博客,IT人的网上家园
【评论】 【推荐】 【大 中 小】 【打印】 【关闭】  1066
 
神经元细胞结构刨析(持续更新) 神经细胞的学习笔记 阅读详情

相关推荐

深入解析音频信号处理的核心算法——傅里叶变换、语音增强、回声消除与主动降噪

本文系统介绍了现代音频信号处理的核心技术。首先阐述傅里叶变换作为理论基础的重要性,它能将声音分解为频域成分。随后重点分析三大关键技术:语音增强利用谱减法、维纳滤波和深度学习从噪声中提取人声;回声消除采用自适应滤波器消除通话中的回声;主动降噪通过声波干涉原理抵消环境噪声。文章最后指出,这些技术在实际应用中协同工作,形成完整的音频处理链路,共同提升语音质量和听觉体验。随着算法进步和算力提升,音频处理技术正向着更智能、更高效的方向发展。

程序猿老樊的博客 1328

mysql 中文字符 比较_mysql中字符集的比较

Mysql中utf8_general_ci与utf8_unicode_ci有什么区别呢?在编程语言中,通常用unicode对中文字符做处理,防止出现乱码,那么在MySQL里,为什么大家都使用utf8_general_ci而不是utf8_unicode_ci呢?MySQL官方文档说明当前,utf8_unicode_ci校对规则仅部分支持Unicode校对规则算法。一些字符还是不能支持。并且,不能完全...

weixin_36159662的博客 867

Protege新手入门:5分钟搞定本体建模基础(附实战案例)

本文为Protege本体建模新手提供了一份快速入门指南。通过构建一个关于“披萨”的实战案例,详细讲解了从环境准备、定义核心类(Classes)、建立对象属性(Object Properties)到设置数据属性(Data Properties)和创建个体的完整流程。文章旨在帮助读者绕过复杂理论,在5分钟内直观掌握本体建模的基础操作,快速建立知识图谱构建的信心。

weixin_28335283的博客 284

java 与 mysql 中文问题的处理

java 与 mysql 中文问题的处理 问题:用 jdbc 插入、读取数据库种文字串乱码。 首先,mysql 数据库中的东西都是二进制存放的,支持任何数据,当然包括中文。你到命令行下 insert into testtable values ( 中文 ); select * from testtable; 全都显示正常。 但是,虽然存取中文没问题,但排序、匹配的时候有问题。所以如果你的数

870

深度解析快递柜管理系统的C++实现:设计与实现

本文详细介绍了一个基于C++的快递柜管理系统的设计与实现,包括系统需求分析、架构设计、数据库设计、关键功能模块实现和测试与验证。通过详细的代码示例和理论分析,读者可以全面了解如何开发一个完整的快递柜管理系统。希望本文能够为读者在实际项目开发中提供有价值的参考。

m0_57781768的博客 714

利用Matlab高效处理Comsol仿真数据的可视化技巧

本文详细介绍了如何将Comsol仿真数据高效导入Matlab并进行专业可视化与后处理。核心内容包括正确的数据导出格式设置、三维矩阵重构方法、二维截面与三维体渲染技巧,以及基于Matlab的定量分析与批处理自动化流程,帮助工程师和科研人员深度挖掘仿真数据价值,提升工作效率。

weixin_29065791的博客 362

mysql java 问题_java 与 mysql 中文问题的处理

java与mysql中文问题的处理--------------------------------------------------------------------------------2005-08-01来源:优快云作者:kengking问题:用jdbc插入、读取数据库种文字串乱码。首先,mysql数据库中的东西都是二进制存放的,支持任何数据,当然包括中文...

weixin_39803977的博客 225

iStoreOS等软路由插件卸载的残留?分享一款软路由高级卸载工具,自定义卸载,轻松解决卸载残留问题

iStoreOS用户看过来!👀 还在被插件包残留困扰吗?本文分享一款“高级卸载”的插件,助你深度清理iStoreOS系统,彻底解决软件卸载不净的痛点,告别频繁恢复出厂设置的烦恼!🚀

XiaoqiangClub的博客 1545

mysql处理还是java程序处理_Java 与 mysql 中文问题的处理

我的环境:中文简体 win2000 pro + sp3mysql server 4.0.12j2sdk 1.4.01connetcor-j 3.0.7问题:用 jdbc 插入、读取数据库种文字串乱码。首先,mysql 数据库中的东西都是二进制存放的,支持任何数据,当然包括中文。你到命令行下insert into testtable values ( '中文' );select * from tes...

weixin_39887531的博客 278

迟滞电压比较器电路的原理与计算

迟滞电压比较器是一种具有双阈值特性的电路,通过正反馈机制实现抗噪声干扰功能。文章详细分析了其工作原理,包括同相型和反相型两种结构的电压阈值计算与电阻设计方法,并提供了已知门限求电阻和已知电阻求门限的推导公式。工程应用中需注意输出类型匹配、电阻取值范围、噪声裕量设计等问题。该比较器在信号处理、波形转换等场景中具有重要应用价值,设计时需综合考虑供电电压、参考电压和噪声特性等因素。

硬核科技 2683

基于Simulink的双向DC-DC变换器在储能系统中的应用仿真

摘要:本文详细介绍了基于Simulink的双向DC-DC变换器在光伏储能系统中的仿真实现。主要内容包括:1)采用非隔离型双向Buck-Boost拓扑作为储能系统枢纽;2)针对750V直流微网中的20kWh锂电池接口场景进行建模;3)详细阐述双闭环控制器设计(电压外环+电流内环)、工作模式判断逻辑等关键步骤;4)通过仿真验证了系统在功率阶跃和模式切换下的性能。文章提供了完整的建模流程和控制方法,为储能系统接口设计提供了实用参考。

amy_mhd的博客 179

[转帖]Java 与 mysql 中文问题的处理

导读:   我的环境:   中文简体 win2000 pro + sp3   mysql server 4.0.12   j2sdk 1.4.01   connetcor-j 3.0.7   问题:用 jdbc 插入、读取数据库种文字串乱码。   首先,mysql 数据库中的东西都是二进制存放的,支持任何数据,当然包括中文。你到命令行下   insert into testtable va

曲奇饼的专栏 553

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Java链接Mysql中文乱码问题处理

 转自http://developer.51cto.com/art/200906/130425.htm java 相关乱问题解决方案【http://blog.matrix.org.cn/page/kjj?entry=jsp_%E4%B8%AD%E6%96%87%E9%97%AE%E9%A2%98_final下面是在网上搜集的资料.java中文问题详解http://www.cn-java

成长中的专栏 752

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

关于Java调用批处理命令向mysql导入数据的中文乱码有关问题

转自 http://www.myexception.cn/mysql/508006.html   最近写了个很没意思的小工具,写到一半的时候发现,mysql的可视化工具里面有可以导入excel文件的工具。不过步骤太多不适合不懂sql的人使用,由此,还是将写到一半的小工具给完成了吧,此工具对于懂代码的人来说没有任何的意义,因为你完全可以使用工具来做。我之所以写这个工具姑且说是一个平台吧,由于要让公

风起于青萍之末,折秀于林 1131

Java 与 mysql 中文问题的处理(转载)

Java 与 mysql 中文问题的处理   发布时间:2006.06.05 14:4

448

java 处理 mysql 中文乱码问题

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34129145的博客 62

关于Java调用批处理命令向mysql导入数据的中文乱码问题

[size=large](转载请标明作者和出处,谢谢合作。) 最近写了个很没意思的小工具,写到一半的时候发现,mysql的可视化工具里面有可以导入excel文件的工具。不过步骤太多不适合不懂sql的人使用,由此,还是将写到一半的小工具给完成了吧,此工具对于懂代码的人来说没有任何的意义,因为你完全可以使用工具来做。我之所以写这个工具姑且说是一个平台吧,由于要让公司销售渠道上的人来使用,他不...

砌砖工 226

Java简单操作mysql数据库代码存档+处理中文乱码问题

首先用的Maven框架,引包: mysql mysql-connector-java 5.1.17 jar compile         存档对mysql的基本读写操作 try { Connect

zzyzzy12 937

Java连接MySQL中文乱码处理

MySQL默认编码是latin1mysql> show variables like character%;+--------------------------+--------------------------+| Variable_name            | Value                    |+-------------------------

杨志伟的专栏 1178

mysql java 中文乱码_mysql +java中文乱码

第二种情况,mysql不能插入中文,而且java查询、更新数据库出现中文乱码参考:http://developer.51cto.com/art/200906/130425.htm1,设置Mysql的编码格式(注意是在创建数据库之前就要设置)找到Mysql安装目录下的myini文件,用记事本打开,找到以下两句改为以下的值:[mysql]default-character-set=gb2312----...

weixin_35117321的博客 285

java 对象乱码_Java中的中文乱码问题

客户端向服务器发送请求时,有两种方式post和get请求,当客户端提交的内容有中文时。服务器要进行设置才能获得中文,否则获得的是乱码。那么怎么设置呢:在servlet中进行设置,有两种情况:1:请求时服务器获得客户提交的中文,2:响应时客户端浏览器得到响应的中文1:服务器获得客户端提交的内容,两种情况get和post请求1)链接、Js等get请求中文乱码处理方式String username=ne...

weixin_35645230的博客 474
上一篇: 一个程序员群的聊天纪录
下一篇: JAVA基础-关于Java中中文问题详解
jxcjxinxing
博客等级 码龄20年 51粉丝 195原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值