`
edison0663
  • 浏览: 78941 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

小感mysql字符集

阅读更多

场景


数据库使用mysql5, 在开发机器上测试过,增删查改都没有问题,然后拉到现网上灰度测试一下,发现部分含有中文的操作结果不符合预期,于是select了一下表里面的内容,发现内容中有许多????,直觉告诉我,charset问题。 然后回归线下,排除了程序的问题后,diff了两台mysql一些配置上的问题。


结果如下:

 

开发机器上的charset设置     


现网机器上的charset设置      
  
google一下关于character_set_client/connection/database/results:
简单摘要


character_set_client      客户端向服务器发送查询时的字符集

character_set_results    服务器向客户端发送数据时的字符集

character_set_connection  服务器将收到的查询串转换为此字符集

character_set_database  数据库默认的字符集

...其他几个掠过...

查了以后,再用show create table xxx 可以确认一下,果然table字符集默认采用了database的gbk。

最后解决,采用alter table 的Charset搞定,注意,如果你的表中已经有数据了,那么你需要自己写工具将数据dump出来再修正后插回去,否则直接这样alter对历史数据是无效的。

 

 

感悟

 

mysql 字符集层次架构非常灵活,但易用性确实差了一点。 层次也太多了,client|result  ,  connection,  database, os ; 不仅如此在同一database, 可对不同table,甚至到列作定制,确实超级灵活。

 

选项太多,出错的机会就更多。 如果只有一个选项,没得选,根本就没出错的机会。

 

另外,层次如果只有 client,database,os 那会怎样?我个人就觉得超级好理解。如果真有那么奇奇怪怪的需求如同一个系统中有n多种字符集,大可提到逻辑层来做。

  • 大小: 41.9 KB
  • 大小: 44.6 KB
分享到:
评论

相关推荐

    如何修改MySQL字符集

    主要介绍了如何修改MySQL字符集,帮助大家更好的理解和使用MySQL数据库,感兴趣的朋友可以了解下

    PHP 设置MySQL连接字符集的方法

    mysql_set_charset()。 这个函数是这样用的: mysql_set_charset(‘utf8’, $link); 成功返回 TRUE,失败返回 ... 您可能感兴趣的文章:MySQL查询随机数据的4种方法和性能对比MySQL的指定范围随机数函数rand()的使用技巧

    Mysql 默认字符集设置方法(免安装版)

    以mysql-noinstall-5.0.22-win32为例,解压缩后会看到mysql-5.0.22-win32文件夹下面,有五个ini格式的文件,把my-medium.ini文件拷贝一份,... 您可能感兴趣的文章:MySQL修改默认字符集编码的方法mysql通过my.cnf修改

    设置mysql5.7编码集为utf8mb4的方法

    移动端的表情或者一些emoji是4字节的,但是utf-8是3字节的,这篇文章主要介绍了设置mysql5.7编码集为utf8mb4的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

    CentOS7下手动安装MySQL5.7.txt

    还有比如授权,字符集等等。 适用人群:MySQL数据库技术人员,IT开发人员,DBA,其它对数据库感兴趣的朋友。 使用场景:需要在Linux环境中进行安装MySQL,需要有一定的Linux基础。 预期目标:本资源的目标是让大家少...

    Linux下安装Mysql8.0及相关错误的解决.docx

    还有比如授权,字符集等等。 适用人群:MySQL8数据库技术人员,IT开发人员,DBA,其它对数据库感兴趣的朋友。 使用场景:需要在Linux环境中进行安装MySQL8,需要有一定的Linux基础。 预期目标:本资源的目标是让大家...

    mysql中文排序注意事项与实现方法

    mysql中文排序方法1 mysql在查询字符串时是大小写不敏感的,在编绎mysql时一般以ISO-8859字符集作为默认的字符集,因此在比较过程中中文编码字符大小写转换造成了这种现象,比较应急的方法是对于包含中文的字段加上”...

    如何更改MySQL数据库的编码为utf8mb4

    utf8mb4编码是utf8编码的超集,兼容utf8,并且能存储4字节的表情字符。 这篇文章给大家介绍了更改MySQL数据库的编码为utf8mb4的相关知识,感兴趣的朋友一起看看吧

    MySQL中文乱码问题解决方案

    1、linux 中 MySQL 出现中文乱码问题如下操作 编辑vi /etc/my.cnf 文件,添加图中标记三行 [client] default-character-set=utf8 ...查看表的设计表中的字符集 您可能感兴趣的文章:MySQL错误TIMESTAMP col

    解析MYSQL 数据库导入SQL 文件出现乱码的问题

    导入数据时,如果目标数据库或表是UTF-8字符集的,而导入SQL中有中文,可能在最终结果中出现乱码,此时只需在导入的SQL文件第一行加入如下内容 即可。/*!40101 SET NAMES utf8 */; 您可能感兴趣的文章:MySQL从...

    数据库设计规范.pdf

    2.2 表字符集使⽤UTF8MB4字符集,校验字符集使⽤utf8mb4_general_ci。 UTF8字符集存储汉字占⽤3个字节,存储英⽂字符占⽤⼀个字节 校对字符集使⽤默认的utf8mb4_general_ci。特别对于使⽤GUI⼯具设计表结构时,要...

    mysql重装后出现乱码设置为utf8可解决

    mysql重装后出现乱码解决办法:只能在配置文件中将database 和 server 字符集 设置为utf8 ,否则不起作用,具体如下感兴趣的朋友可以参考下哈,希望对大家有所帮助

    Linux SecureCRT显示乱码解决方案

    2、设置字符集为GB2312后保存好后确认退出。 3、再次测试一下。 您可能感兴趣的文章:基于SecureCRT向远程Linux主机上传下载文件步骤图解浅谈ubuntu 使用securecrt vi编辑出现的问题SecureCRT中文显示乱码问题的...

    springmybatis

    其实还有更简单的方法,而且是更好的方法,使用合理描述参数和SQL语句返回值的接口(比如IUserOperation.class),这样现在就可以至此那个更简单,更安全的代码,没有容易发生的字符串文字和转换的错误.下面是详细...

    asp.net知识库

    .NET 2.0中的字符串比较 小试ASP.NET 2.0的兼容性 为 asp.net 2.0 的菜单控件增加 target 属性 ASP.NET 2.0 的内部变化 常见的 ASP.NET 2.0 转换问题和解决方案 Asp.Net2.0无刷新客户端回调 体验.net 2.0 的优雅(1...

Global site tag (gtag.js) - Google Analytics