程序处理

这是一个历史遗留系统, 旧的系统是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

) USING utf8

) AS NICKNAME_UTF8

FROM

USER

WHERE

USERID = 15889;

其中 LATIN1_COLUMN 是LATIN1 编码的字符集

最后, 我们可以把这样的转换做成一张视图, 程序就不用再转换了.

CREATE VIEW V_USER AS

SELECT

USER.USERID AS USERID,

CONVERT (

CAST(

CONVERT ( USER.NICKNAME USING latin1 ) AS BINARY

) USING utf8

) AS NICKNAME

FROM

USER;

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

  1. c语言连接数据库例子,c语言操作mysql数据库小例子_互帮互助(C language MySQL database operation example _ mutual help).doc...

    这是精心收集的精品经典资料,值得下载保存阅读! c语言操作mysql数据库小例子_互帮互助(C language MySQL database operation example _ mutual h ...

  2. mysql unicode转汉字_如果有人问你 MySql 怎么存取 Emoji,把这篇文章扔给他

    01.前言 Emoji 在我们生活中真的是越来越常见了,几乎每次发消息的时候不带个 Emoji,总觉得少了点什么,似乎干巴巴的文字已经无法承载我们丰富的感情了.对于我们开发者来说,如何将 Emoji ...

  3. mysql 2003报错_为什么不建议在 MySQL 中使用 UTF-8?

    正文 记得去年我在往MySQL存入emoji表情 时,一直出错,无法导入.后来找到办法 -- 通过把 utf8 改成 utf8mb4 就可以了,并没有深究. 一年后,我看到一篇文章讲到emoji文字占 ...

  4. mysql share 字体 中文_简单明白彻底解决 MySQL 中文编码问题

    1. 问题重现 mysql> create database school; mysql> use school; mysql> create table student(name ...

  5. mysql主流使用版本_简述3个主流MySQL版本特性

    MySQL作为一个关系型数据库管理系统,在数据处理方面有其独特的优势.MySQL软件采用了双授权政策,分为社区版和商业版,由于其体积小.速度快.总体拥有成本低,尤其是开放源码这一特点,使得MySQL占 ...

  6. c 对一个mysql数据库进行操作_用C语言操作MySQL数据库

    函数 描述 mysql_affected_rows() 返回上次UPDATE.DELETE或INSERT查询更改/删除/插入的行数. mysql_autocommit() 切换autocommit模式 ...

  7. mysql镜像压缩包使用_如何连接docker的mysql镜像

    展开全部 推荐使用Dockerfile方式. 服务的管理使用的是supervisord, 因为dockerfile里只会有一个cmd生效,如果我想62616964757a686964616fe5868 ...

  8. ubuntu安装mysql 密码忘了怎么办_在ubuntu上面安装mysql都密码忘记及一些常用命令...

    重改密码! # /etc/init.d/mysql stop # mysqld_safe --user=mysql --skip-grant-tables --skip-networking & ...

  9. mysql实现心跳表_第29问:MySQL 的复制心跳说它不想跳了

    问题 最近年底,大家的数据库经常跑批量大事务,会发现复制突然断开,报错"心跳与本地信息不兼容": 会是什么原因? 实验 我们先来复现一下,再进行分析. 宽油,做一对主从数据库: 我 ...

最新文章

  1. 代码操作Oracle
  2. 利用Powershell查询AD中账号属性
  3. hikaridatasource 加密后登陆不上_python测试开发django42.auth模块登陆认证
  4. 通过修改注册表设定浏览器的却省值
  5. 译 | .NET Core 基础架构进化之路(二)
  6. jremind V0.1.3.0添加透明
  7. 某简单易懂的人脸识别 API 的开发环境搭建和简易教程
  8. java父包引用_父类引用指向子类对象(java)
  9. 不同人眼中的“顶级程序员”,这差距也太大了吧!
  10. studio one 3 机架声道设置_雅马哈UR242声卡宿主机架直播跳线设置
  11. 编译龙芯PMON流程
  12. Mobileye自动驾驶汽车在纽约市开跑
  13. Wed前端开发 ---- HTML超文本标记语言
  14. 我的基金组合和选择标准
  15. Kotlin object的三种用法
  16. [转载]信息安全从业参考
  17. 2016中国移动CRM洞察力论坛召开|码客荣获2016中国移动CRM产品创新奖
  18. 【计算方法】线性方程组的数值解法
  19. AutoCAD生成png透明图像
  20. 您还没有登录或登录已超时,请重新登录

热门文章

  1. Linux shell脚本、定时备份mysql数据库、sendMail邮件发送
  2. android registerreceiver传参数,registerReceiver()方法传入的receiver为null时的具体实现?...
  3. 一图搞懂CLR,CIL,CTS,CLS,FCL,BCL之间的关系
  4. 考二建机电好考吗?后期前景怎么样?
  5. Latex教程:数学公式
  6. 最长回文子串 : Marcher算法
  7. R语言绘制时间序列的自相关函数图:使用acf函数可视化时间序列数据的自相关系数图
  8. accept函数和revc函数
  9. 关于iOS10 - iMessage App的总结
  10. 对偶上升法 (Dual Ascent)