MySql字符集修改
问题分析
- 普通的字符串或者表情都是占位3个字节,所以utf8足够用了,但是移动端的表情符号占位是4个字节,普通的utf8就不够用了,为了应对无线互联网的机遇和挑战、避免 emoji 表情符号带来的问题、涉及无线相关的 MySQL 数据库建议都提前采用 utf8mb4 字符集,这必须要作为移动互联网行业的一个技术选型的要点
- Mysql 版本的限制,Mysql 5.5.3之前的版本,支持的utf8为3字节的,Mysql 5.5.3之后的版本支持utf8mb4
解决方案
首先我们看下哪些地方可能需要我们修改编码:
- 库(database)的编码
- 表(table)的编码
- 字段(column)的编码
- 程序中,数据库的连接url
- 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
去掉,实测此步骤可以不用改变。
字符集知识扩展
- 字符集、连接字符集、排序字符集
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字符集修改相关推荐
- mysql字符集修改无效,Mysql字符集的修改及查看问题_MySQL
bitsCN.com Mysql字符集的修改及查看问题 修改及查看mysql数据库的字符集 修改my.cnf vi /etc/my.cnf 在[client]下添加 default-character ...
- mysql字符集修改保存_mysql更改已有数据表的字符集,保留原有数据内容
环境:在应用开始阶段没有正确的设置字符集,在运行一段时间以后才发现存在不能满足需求需要调整,又不想丢弃这段时间的数据,那么就需要进 行字符集的修改.字符集的修改不能直接通过"alter da ...
- mysql字符集修改_修改Mysql字符集
第一种 一.修改my.ini配置文件(MySQL配置文件) character_set_server = utf8 #设置字符集 查看当前数据库字符集 show VARIABLES like 'cha ...
- mysql字符集查看与设置
一.查看 MySQL 字符集 以下命令 Windows & Linux通用. 1. 服务器和数据库 mysql> show variables like '%char%'; +----- ...
- 查看mysql字符集及修改表字符集
MySQL 乱码的根源是的 MySQL 字符集设置不当的问题,本文汇总了有关查看 MySQL 字符集的命令.包括查看 MySQL 数据库服务器字符集.查看 MySQL 数据库字符集,以及数据表和字段的 ...
- mysql5.0修改字符集,查看mysql字符集及修改表结构
MySQL 乱码的根源是的 MySQL 字符集设置不当的问题,本文汇总了有关查看 MySQL 字符集的命令.包括查看 MySQL 数据库服务器字符集.查看 MySQL 数据库字符集,以及数据表和字段的 ...
- 查看修改MySQL字符集
查看修改MySQL字符集 http://blog.sina.com.cn/s/blog_70ac6bec01016fts.html 查看修改MySQL字符集 (2012-08-22 09:53:21) ...
- linux修改mysql字符集6,linux下mysql字符集编码问题的修改
安装完的MySQL的默认字符集为 latin1 ,为了要将其字符集改为用户所需要的(比如utf8),就必须改其相关的配置文件:由于linux下MySQL的默认安装目录分布在不同的文件下:不像windo ...
- mysql的字符集修改_修改MySQL字符集
1.关于MySQL字符集 MySQL的字符集支持(CharacterSet Support)有两个方面: 字符集(Characterset)和排序方式(Collation). MySQL对于字符集的支 ...
- mysql查看当前表字符集_查看mysql字符集及修改表字符集
MySQL 乱码的根源是的 MySQL 字符集设置不当的问题,本文汇总了有关查看 MySQL 字符集的命令.包括查看 MySQL 数据库服务器字符集.查看 MySQL 数据库字符集,以及数据表和字段的 ...
最新文章
- 华为员工哀叹:32岁大码农只能在华为等裁,出去薪资没人接得住!出路在哪儿?...
- tl r402路由器设置_怎么进入路由器设置界面
- C# ListT用法
- CAS增加免登陆(Remember Me)功能
- cocos2d-x 3.0 常见问题及解决
- linux 在线帮助,linux教程之在线帮助
- kgdb调试内核无法执行断点及kdb-22:Permisson denied
- 【图像隐写】基于matlab GUI DWT+DCT+SVD数字水印嵌入提取攻击(带面板)【含Matlab源码 1664期】
- User-Agent的变迁——浏览器大战之前世今生
- 2012最热门软件游戏下载Top搜集(热门影音,游戏,办公软件大集合)
- 交运集团开设“技师工作站“ 创新“机电一体化“人才培养模式
- 4.2-软件开发中,“思维导图”的作用与绘制方法介绍
- 如何使用.REG文件来操作注册表
- (图像加密)常用图像置乱算法matlab实现(三)
- 书家必备——容易寫錯用錯的繁體字一百例
- Linux下的桥接模式
- jmeter实现UI自动化demo
- 宝宝出生前需要准备的用品
- HTML5与CSS3及Less
- 手机号空号批量检测接口