免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 25827 | 回复: 83

[讨论]MySQL运维----"诡异"的字符集问题(获奖名单已公布-2012-8-23) [复制链接]

论坛徽章:
0
发表于 2012-07-17 14:10 |显示全部楼层

获奖名单已公布,详情请看:http://bbs.chinaunix.net/thread-3767014-1-1.html
简介:
MySQL服务器有一个默认的字符集,并且允许同时使用多种字符集.查看当前MySQL的字符集.SHOW CHARACTER SET;Unicode是一个统一的字符编码方案,UTF-8(Unicode Transformation Format,统一编码格式)采用一种长度可变的格式,使用1-3个字节来表示一个字符.在mysql中,也可以写成utf8mb3,后来的utf8mb4是用1-4个字节来表示一个字符.

有没有经常听到这样的声音:
"用mysql自带的客户端,查出来的数据是乱码"
"明明有数据,为什么like不到..."
"设置了索引,为什么mysql弃而不用"
"怎么设置mysql的字符集"
......
伴随这些问题,跟大家一起浅析关于MySQL字符集的问题.

        1. 下面每个参数选项各代表什么?
        mysql> show variables like 'character%';
        +--------------------------+----------------------------+
        | 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          | /usr/share/mysql/charsets/ |
        +--------------------------+----------------------------+

        2. 如何更改字符集的设置?
        3. 字符集对数据查询的影响?
        
弄清楚这三个问题,完全可以应对日常的需求,如果继续深入研究,还有一个不得不提"排序规则",大家也可以根据此问题提出讨论.

邀请嘉宾:
              胡伟  (小版主杀手)    MySQL版版主
              cenaluu                    MySQL版版主
              宁连杰(niing_lianjie) Python版版主 去哪儿网DBA

讨论时间:2012.7.17-2012.8.6

活动有奖:我们为大家准备了姜承尧著作《MySql技术内幕 SQL编程》图书5本,奖励给积极参与回复的网友。

论坛徽章:
0
发表于 2012-07-17 14:16 |显示全部楼层
支持

论坛徽章:
0
发表于 2012-07-17 14:16 |显示全部楼层
欢迎大家分享讨论~!

论坛徽章:
4
CU大牛徽章
日期:2013-03-13 15:32:35CU大牛徽章
日期:2013-03-13 15:38:15CU大牛徽章
日期:2013-03-13 15:38:52戌狗
日期:2013-12-27 15:08:11
发表于 2012-07-17 14:18 |显示全部楼层
书籍不错

论坛徽章:
4
CU大牛徽章
日期:2013-03-13 15:32:35CU大牛徽章
日期:2013-03-13 15:38:15CU大牛徽章
日期:2013-03-13 15:38:52戌狗
日期:2013-12-27 15:08:11
发表于 2012-07-17 14:28 |显示全部楼层
MySQL的字符集支持(Character Set Support)有两个方面:
        字符集(Character set)和排序方式(Collation)
对于字符集的支持细化到以下几个层次:
服务器, 数据库, 数据表,数据列, 连接等
继续ing

论坛徽章:
2
2015年迎新春徽章
日期:2015-03-04 09:55:28IT运维版块每日发帖之星
日期:2016-07-29 06:20:00
发表于 2012-07-17 14:36 |显示全部楼层
回复 5# 小版主杀手
单个连接也可以设置字符集吗?是不是需要高版本的jdbc支持.
之前我们遇到过一个应用,不能更改连接字符集,所以把库的默认字符集改了.
例如:
ALTER DATABASE CHARSET=utf8mb4;

   

论坛徽章:
4
CU大牛徽章
日期:2013-03-13 15:32:35CU大牛徽章
日期:2013-03-13 15:38:15CU大牛徽章
日期:2013-03-13 15:38:52戌狗
日期:2013-12-27 15:08:11
发表于 2012-07-17 15:00 |显示全部楼层
ning_lianjie 发表于 2012-07-17 14:36
回复 5# 小版主杀手
单个连接也可以设置字符集吗?是不是需要高版本的jdbc支持.
之前我们遇到过一个应用, ...

有个参数character_set_connection:连接层字符集
参考下这个文章http://hi.baidu.com/jackbillow/b ... 9ad2a0d8335aa6.html

论坛徽章:
4
CU十二周年纪念徽章
日期:2013-10-24 15:41:34摩羯座
日期:2013-12-24 13:05:332015亚冠之西悉尼流浪者
日期:2015-10-09 16:03:47fulanqi
日期:2016-06-17 17:54:25
发表于 2012-07-17 15:30 |显示全部楼层
姜承尧著作《MySql技术内幕 SQL编程》, 好书啊~

论坛徽章:
4
CU十二周年纪念徽章
日期:2013-10-24 15:41:34摩羯座
日期:2013-12-24 13:05:332015亚冠之西悉尼流浪者
日期:2015-10-09 16:03:47fulanqi
日期:2016-06-17 17:54:25
发表于 2012-07-17 16:02 |显示全部楼层
本帖最后由 hbsycw 于 2012-07-17 16:03 编辑

1. 下面每个参数选项各代表什么?
     mysql> show variables like 'character%';

   系统环境变量:   
   character_set_client:客户端来源数据使用的字符集
   character_set_connection:连接层字符集   
   character_set_database:当前选中数据库的默认字符集
   character_set_filesystem:  底层文件系统(binary )
   character_set_results:查询结果字符集
   character_set_server:默认的内部操作字符集
   character_set_system:系统元数据(字段名等)字符集
   character_sets_dir: 这个自然是指明目录了~

2. 如何更改字符集的设置?
    a 静态配置修改:直接修改mysql的my.ini文件中的字符集键值
        default-character-set = utf8
       character_set_server = utf8
    修改完后,重启mysql的服务,即可!
   b  动态设置修改:
       修改数据库的字符集
         mysql>use mydb
         mysql>alter database mydb character set utf-8;

       创建数据库指定数据库的字符集
         mysql>create database mydb character set utf-8;

       直接使用mysql的命令修改
            SET character_set_client = utf8 ;
              SET character_set_connection = utf8 ;
         ......

3. 字符集对数据查询的影响?     
     尽量保持所有的操作都用同一种编码,如果字符集不一致,当然就会造成乱码了。如果考虑支持多国语言,当然推荐utf8编码。


,回答完毕~
  

评分

参与人数 1可用积分 +8 收起 理由
枫影谁用了 + 8 很给力!

查看全部评分

论坛徽章:
0
发表于 2012-07-17 16:56 |显示全部楼层
回复 8# hbsycw


    还是亲笔签名的~!!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP