问题分析

  1. 普通的字符串或者表情都是占位3个字节,所以utf8足够用了,但是移动端的表情符号占位是4个字节,普通的utf8就不够用了,为了应对无线互联网的机遇和挑战、避免 emoji 表情符号带来的问题、涉及无线相关的 MySQL 数据库建议都提前采用 utf8mb4 字符集,这必须要作为移动互联网行业的一个技术选型的要点
  2. Mysql 版本的限制,Mysql 5.5.3之前的版本,支持的utf8为3字节的,Mysql 5.5.3之后的版本支持utf8mb4

解决方案

首先我们看下哪些地方可能需要我们修改编码:

  1. 库(database)的编码
  2. 表(table)的编码
  3. 字段(column)的编码
  4. 程序中,数据库的连接url
  5. mysql的配置文件my.conf中

我们可以先查询下当前数据库的编码信息:

SHOW VARIABLES LIKE 'character_set_%'
Variable_name Value
character_set_client utf8
character_set_connection utf8
character_set_database utf8
character_set_filesystem binary
character_set_results utf8
character_set_server utf8
character_set_system utf8
character_sets_dir /opt/install/mysql/share/charsets/

我们将库的编码修改

datebase charset=utf8mb4
datebase collation=utf8mb4_unicode_ci

将表的编码修改

character set=utf8mb4
collation=utf8mb4_unicode_ci

将需要支持emoji表情字段的编码修改

Charset=utf8mb4
Collation=utf8mb4_unicode_ci

修改mysql的配置文件my.conf

[client]
# 客户端来源数据的默认字符集
default-character-set = utf8mb4[mysql]
# 数据库默认字符集
default-character-set = utf8mb4[mysqld]
# 服务端默认字符集
character-set-server=utf8mb4
# 连接层默认字符集
collation-server=utf8mb4_unicode_ci

修改完毕后,记得重新启动mysql服务

/etc/init.d/mysql restart

修改后,刷新连接后查看相关变量:

Variable_name Value
character_set_client utf8mb4
character_set_connection utf8mb4
character_set_database utf8mb4
character_set_filesystem binary
character_set_results utf8mb4
character_set_server utf8mb4
character_set_system utf8
character_sets_dir /opt/install/mysql/share/charsets/

实测:修改项目中的连接数据库的url,将characterEncoding=utf-8去掉,实测此步骤可以不用改变。

字符集知识扩展

  1. 字符集、连接字符集、排序字符集

utf8mb4对应的排序字符集有utf8mb4_unicode_ci、utf8mb4_general_ci.

  • utf8mb4_unicode_ci和utf8mb4_general_ci的对比:
  • 准确性:

    • utf8mb4_unicode_ci是基于标准的Unicode来排序和比较,能够在各种语言之间精确排序
    • utf8mb4_general_ci没有实现Unicode排序规则,在遇到某些特殊语言或者字符集,排序结果可能不一致。
    • 但是,在绝大多数情况下,这些特殊字符的顺序并不需要那么精确。
  • 性能

    • utf8mb4_general_ci在比较和排序的时候更快
    • utf8mb4_unicode_ci在特殊情况下,Unicode排序规则为了能够处理特殊字符的情况,实现了略微复杂的排序算法。
    • 但是在绝大多数情况下发,不会发生此类复杂比较。相比选择哪一种collation,使用者更应该关心字符集与排序规则在db里需要统一。

至于排序规则(collation) 选择默认的 utf8mb4_general_ci,还是 utf8mb4_unicode_ci。 请参考stack overflow的这篇帖子。 讨论结果从排序的准确性,以及性能方面,告诉我们应该选用 utf8mb4_unicode_ci

MySql字符集修改相关推荐

  1. mysql字符集修改无效,Mysql字符集的修改及查看问题_MySQL

    bitsCN.com Mysql字符集的修改及查看问题 修改及查看mysql数据库的字符集 修改my.cnf vi /etc/my.cnf 在[client]下添加 default-character ...

  2. mysql字符集修改保存_mysql更改已有数据表的字符集,保留原有数据内容

    环境:在应用开始阶段没有正确的设置字符集,在运行一段时间以后才发现存在不能满足需求需要调整,又不想丢弃这段时间的数据,那么就需要进 行字符集的修改.字符集的修改不能直接通过"alter da ...

  3. mysql字符集修改_修改Mysql字符集

    第一种 一.修改my.ini配置文件(MySQL配置文件) character_set_server = utf8 #设置字符集 查看当前数据库字符集 show VARIABLES like 'cha ...

  4. mysql字符集查看与设置

    一.查看 MySQL 字符集 以下命令 Windows & Linux通用. 1. 服务器和数据库 mysql> show variables like '%char%'; +----- ...

  5. 查看mysql字符集及修改表字符集

    MySQL 乱码的根源是的 MySQL 字符集设置不当的问题,本文汇总了有关查看 MySQL 字符集的命令.包括查看 MySQL 数据库服务器字符集.查看 MySQL 数据库字符集,以及数据表和字段的 ...

  6. mysql5.0修改字符集,查看mysql字符集及修改表结构

    MySQL 乱码的根源是的 MySQL 字符集设置不当的问题,本文汇总了有关查看 MySQL 字符集的命令.包括查看 MySQL 数据库服务器字符集.查看 MySQL 数据库字符集,以及数据表和字段的 ...

  7. 查看修改MySQL字符集

    查看修改MySQL字符集 http://blog.sina.com.cn/s/blog_70ac6bec01016fts.html 查看修改MySQL字符集 (2012-08-22 09:53:21) ...

  8. linux修改mysql字符集6,linux下mysql字符集编码问题的修改

    安装完的MySQL的默认字符集为 latin1 ,为了要将其字符集改为用户所需要的(比如utf8),就必须改其相关的配置文件:由于linux下MySQL的默认安装目录分布在不同的文件下:不像windo ...

  9. mysql的字符集修改_修改MySQL字符集

    1.关于MySQL字符集 MySQL的字符集支持(CharacterSet Support)有两个方面: 字符集(Characterset)和排序方式(Collation). MySQL对于字符集的支 ...

  10. mysql查看当前表字符集_查看mysql字符集及修改表字符集

    MySQL 乱码的根源是的 MySQL 字符集设置不当的问题,本文汇总了有关查看 MySQL 字符集的命令.包括查看 MySQL 数据库服务器字符集.查看 MySQL 数据库字符集,以及数据表和字段的 ...

最新文章

  1. 华为员工哀叹:32岁大码农只能在华为等裁,出去薪资没人接得住!出路在哪儿?...
  2. tl r402路由器设置_怎么进入路由器设置界面
  3. C# ListT用法
  4. CAS增加免登陆(Remember Me)功能
  5. cocos2d-x 3.0 常见问题及解决
  6. linux 在线帮助,linux教程之在线帮助
  7. kgdb调试内核无法执行断点及kdb-22:Permisson denied
  8. 【图像隐写】基于matlab GUI DWT+DCT+SVD数字水印嵌入提取攻击(带面板)【含Matlab源码 1664期】
  9. User-Agent的变迁——浏览器大战之前世今生
  10. 2012最热门软件游戏下载Top搜集(热门影音,游戏,办公软件大集合)
  11. 交运集团开设“技师工作站“ 创新“机电一体化“人才培养模式
  12. 4.2-软件开发中,“思维导图”的作用与绘制方法介绍
  13. 如何使用.REG文件来操作注册表
  14. (图像加密)常用图像置乱算法matlab实现(三)
  15. 书家必备——容易寫錯用錯的繁體字一百例
  16. Linux下的桥接模式
  17. jmeter实现UI自动化demo
  18. 宝宝出生前需要准备的用品
  19. HTML5与CSS3及Less
  20. 手机号空号批量检测接口

热门文章

  1. 京东面试撞上重感冒(纯粹面试之感)。。。。。。
  2. Arduino学习笔记6
  3. JavaScript不用临时变量交换两个变量的值的七种解决方案
  4. mysql数据库表格导出为excel表格
  5. Java NIO之缓冲区Buffer
  6. Android Touch 事件的分发和消费机制
  7. asp.net服务器控件开发-学习之路(一)
  8. 103 解决粘包问题
  9. L2Dwidget.js L2D网页动画人物添加
  10. Katalon Recorder 自动录制 Selenium 爬虫脚本