mysql latin1 utf8差别_不同子系统采用不同MySQL编码LATIN1和UTF8的兼容

程序处理

这是一个历史遗留系统, 旧的系统是C++开发的, 插入数据的时候, 没有统一MYSQL各个层次(服务器, 数据库, 表, 列)的编码, 这个情况基本上是MYSQL的默认安装导致的, 实际的数据编码为LATIN1, 而采用Java 开发的新的系统需要和这个遗留系统公用数据库, 采用的是UTF8编码, 碰到的问题是Java代码中获取到的中文为乱码.

搞清楚了这个问题, Java中把乱码转换为正常显示的UTF8编码的中文很简单, 下面是转换代码

/**

* LATIN1转UTF8

*

* @param latin1 LATIN1(ISO_8859_1)字符串

* @return UTF8字符串

*/

public String encodingConvert(String latin1) {

return new String(

latin1.getBytes(StandardCharsets.ISO_8859_1),

StandardCharsets.UTF_8

);

}

这是使用程序代码的处理方式, 有的时候我们需要直接从SQL返回的结果集中直接拿到UTF8的数据, 看下面

SQL内置函数转换

上面通过程序代码可以处理字符集的转换, 下面通过SQL的方式转换

CONVERT和CAST函数: 首先需要把LATIN1的转为BINARY, 然后再把BINARY转为UTF8

SELECT

USER.USERID AS USERID,

USER.NICKNAME AS NICKNAME_LATIN1,

CONVERT (

CAST(

CONVERT ( USER.NICKNAME USING latin1 ) AS BINARY

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值