java 与 mysql 中文问题的处理
--------------------------------------------------------------------------------
2005-08-01 来源:优快云 作者:kengking
问题:用 jdbc 插入、读取数据库种文字串乱码。
首先,mysql 数据库中的东西都是二进制存放的,支持任何数据,当然包括中文。你到命令行下
insert into testtable values ( '中文' );
select * from testtable;
全都显示正常。
但是,虽然存取中文没问题,但排序、匹配的时候有问题。所以如果你的数据库里有中文的话,记得在配置文件中,如 c:winntmy.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 转换。
我的修改方式: commysqljdbcConnecter.java 这个文件的 1969 行,
this.doUnicode = true; // force the issue
将之上移四行到 1964 行,放在下面这一行的前面:
try {
用这份代码重新编出来的 jdbc driver ,你的 java 访问数据库的程序不用做任何修改就可以正确读写中文了,不过要记得 mysql server 要 default-character-set=gbk
我使用它测试了几个小程序,中文都显示正常,而且都没死机、异常。呵呵,自我感觉很好。
相关推荐
大模型训练显存瘦身全记录:从ZeRO-3参数分区到CPU Offload的硬件协奏曲
本文详细解析了如何通过ZeRO-3参数分区与CPU/NVMe卸载技术优化大模型训练的显存使用。结合bf16混合精度与梯度累积等策略,实现在消费级GPU上高效训练百亿参数模型,显著提升硬件利用率与训练效率。
mysql 字段 英文 变 中文_java调整数据库保存指定长度字段,(英文占1,中文占2或3)...
在编写存入数据库数据时,一次碰见,字段过长,无法存入的尴尬。数据库长度为50,页面中我截取45位,满以为不会出错。结果忽略了,一个中文字符的长度在数据库中占的不是1。中文GBK字符长度为2,UTF-8长度为3,下面就是一个,判断字符串,并截取指定长度的方法。如果长度超标,会向前截取,并在最后加入三个英文字符...例,字段保存到数据库,要从保存50长度 ,但是subString(),如果纯汉字,能保...
步进电机驱动算法——梯形加减速算法
目录步进电机梯形加减速梯形加减速算法原理分析算法实现 步进电机梯形加减速 电机的控制方式一般分为开环控制与闭环控制两种控制方式,其中开环控制原理框图如下: 这种种控制方式的特点是:控制简单、实现容易、价格较低,这种开环控制方式,负载位置对控制电路没有反馈。 对于步进电机,控制脉冲的输入并不依赖于转子的位置,而是按一固定的规律发出控制脉冲,如果励磁变化太快,电机不能移动到新的位置,那么实际负载位置与理想位置就会产生一个偏差,就有可能出现失步或者过冲现象,所以需要使用加减速算法。 梯形加减速算法,S加减速算法等
mysql编程中文处理,Java操作MySQL的中文处理方法
Java操作MySQL的中文处理方法分享到:这是很头痛的问题,一直都是在困扰着我们。我有一个不算简单也不算难的方法,这是我一直在用的方式。1、建立一个类,包括一个格式将中文转换为ISO8859-1编码的方法:publicclassFormat2Chinese{publicFormat2Chinese(){}publicStringformat2IS08859(Stringstr){...
基于Quartus II软件的FPGA综合实验——多功能数字钟
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录前言一、设计要求二、设计原理三、设计过程1.数码管扫描模块2.计时模块3.闹钟模块4.闹钟响铃模块5.数码管显示模块6.整点报时功能7.模式选择模块(计时器主控电路)四、实验中遇到的困难及解决方案五、总结 前言 FPGA综合实验——多功能数字钟 基于Quartus II软件 一、设计要求 设计一个能进行时、分、秒计时的十二小时制或二十四小时制的数字钟,并具有定时与闹钟功能,能在设定的时间发出闹铃音,能非常方便地对小时、分钟和秒进.
服务器测试之网卡性能调优
nvidia下载mlnx_ofed:https://network.nvidia.com/products/infiniband-drivers/linux/mlnx_ofed/intel下载驱动固件:https://www.intel.com/content/www/us/en/download-center/home.html。然而,你可以根据实际情况手动调整中断相关配置。老生常谈了,一些性能相关的设置项打开,节能的关闭,虚拟化相关的VMX/SR-IOV/IOMMU最好也都关掉。
java获取map乱码_Java程序使用MySQL时返回参数为乱码的解决方案大全
解决Java程序使用MySQL时返回参数为乱码的示例教程先说MySQL的字符集问题。Windows下可通过修改my.ini内的default-character-set=utf8 //客户端的默认字符集在MySQL客户端工具中输入SHOW VARIABLES LIKE 'character%';显示如下这样执行读取信息返回中文为乱码,解决办法是,在连接数据库之后,读取数据之前,先执行一项查询 S...
使用PyTorch设计卷积神经网络(CNN)来处理遥感图像Indian Pines数据集
使用PyTorch设计卷积神经网络(CNN)来处理遥感图像Indian Pines数据集
java新增mysql时 中文出现_java在mysql中添加数据出现中文乱码怎么解决
java在mysql中添加数据出现中文乱码怎么解决发布时间:2020-06-29 10:44:50来源:亿速云阅读:89作者:Leahjava在mysql中添加数据出现中文乱码怎么解决?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。原因:造成乱码的原因是字符集不一致,通常只需要数据库建表时候指定的字符集与java设置数据库连接设置u...
告别轮询!用STM32CubeMX给STM32F030配置ADC多通道+DMA,实测代码分享
本文详细介绍了如何使用STM32CubeMX为STM32F030配置ADC多通道采集与DMA传输,显著提升采集效率。通过实测对比轮询与DMA模式的性能差异,提供完整的代码实现和优化技巧,帮助开发者快速掌握这一高效采集方案。
Autosar配置——导入DBC后配置SecOC同步报文和同步请求报文
在Autosar中,安全性是一个重要的考虑因素,而SecOC(Secure On-Board Communication)是一种用于保护通信数据完整性和安全性的安全机制。在上述示例中,我们配置了同步报文和同步请求报文的属性。接下来,我们需要在Autosar中配置同步报文和同步请求报文。同步报文用于在通信双方之间同步SecOC状态,而同步请求报文用于请求SecOC的状态信息。通过以上配置,我们成功地导入了DBC文件,并在Autosar系统中配置了SecOC同步报文和同步请求报文。希望以上信息对您有所帮助!
mysql java 问题_java 与 mysql 中文问题的处理
java与mysql中文问题的处理--------------------------------------------------------------------------------2005-08-01来源:优快云作者:kengking问题:用jdbc插入、读取数据库种文字串乱码。首先,mysql数据库中的东西都是二进制存放的,支持任何数据,当然包括中文...
【深度学习新浪潮】算力行业的核心技术有哪些?
算力行业核心技术是芯片+互联+存储+调度+能效+软件的全栈协同:芯片提供算力、互联打通集群、存储保障数据、调度提升效率、能效支撑规模、软件释放算力。当前AI大模型推动算力从“单机”走向“万卡级超节点集群”,技术竞争从单一芯片升级为系统级、全栈化的综合能力。
Java 与 mysql 中文问题的处理
Java 与 mysql 中文问题的处理 作者: 发文时间:2006.06.05 来源:优快云
老版QQ原生表情gif动态
这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。
C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片
基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正
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...
蓝牙模块HM-10手册
蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。
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
怀旧版电脑GBC模拟器
再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。
[转帖]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
关于Java调用批处理命令向mysql导入数据的中文乱码有关问题
转自 http://www.myexception.cn/mysql/508006.html 最近写了个很没意思的小工具,写到一半的时候发现,mysql的可视化工具里面有可以导入excel文件的工具。不过步骤太多不适合不懂sql的人使用,由此,还是将写到一半的小工具给完成了吧,此工具对于懂代码的人来说没有任何的意义,因为你完全可以使用工具来做。我之所以写这个工具姑且说是一个平台吧,由于要让公
Java 与 mysql 中文问题的处理(转载)
Java 与 mysql 中文问题的处理 发布时间:2006.06.05 14:4
java 处理 mysql 中文乱码问题
2019独角兽企业重金招聘Python工程师标准>>> ...
Java简单操作mysql数据库代码存档+处理中文乱码问题
首先用的Maven框架,引包: mysql mysql-connector-java 5.1.17 jar compile 存档对mysql的基本读写操作 try { Connect
关于Java调用批处理命令向mysql导入数据的中文乱码问题
[size=large](转载请标明作者和出处,谢谢合作。) 最近写了个很没意思的小工具,写到一半的时候发现,mysql的可视化工具里面有可以导入excel文件的工具。不过步骤太多不适合不懂sql的人使用,由此,还是将写到一半的小工具给完成了吧,此工具对于懂代码的人来说没有任何的意义,因为你完全可以使用工具来做。我之所以写这个工具姑且说是一个平台吧,由于要让公司销售渠道上的人来使用,他不...
435



被折叠的 条评论
为什么被折叠?



