免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: 无风之谷

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

论坛徽章:
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-18 12:49 |显示全部楼层
回复 13# ning_lianjie

mysql_query("SET NAMES UTF8");


   

论坛徽章:
1
2015亚冠之本尤德科
日期:2015-06-05 17:25:48
发表于 2012-07-18 14:01 |显示全部楼层
我一般在导入导出操作sql语句,如下操作:

导出:
/usr/local/webserver/mysql/bin/mysqldump -uroot -p'xxx' -S /data/3306/mysql.sock --single-transaction --default-character-set=utf8 apps t_app_song_baseinfo t_app_song_doc_rel t_app_song_docs >/home/zhangshengdong/apps_song.sql

linux的sql文件用sz导出到windows文件,windows上传到linux 的时候,我会先zip一下,然后二进制上传,保证数据编码的正确。

导入:
mysql -uroot -p'xxx' -S /data/mysqldata/3307/mysql.sock --default-character-set=utf8 apps </home/mysql/apps_song.sql


要是一般的做sql语句的操作就是,set names gbk;


要注意的是,SecureCRT本身的会话选项也有字符集编码,最好设置成默认的字符集编码.

论坛徽章:
59
2015七夕节徽章
日期:2015-08-24 11:17:25ChinaUnix专家徽章
日期:2015-07-20 09:19:30每周论坛发贴之星
日期:2015-07-20 09:19:42ChinaUnix元老
日期:2015-07-20 11:04:38荣誉版主
日期:2015-07-20 11:05:19巳蛇
日期:2015-07-20 11:05:26CU十二周年纪念徽章
日期:2015-07-20 11:05:27IT运维版块每日发帖之星
日期:2015-07-20 11:05:34操作系统版块每日发帖之星
日期:2015-07-20 11:05:36程序设计版块每日发帖之星
日期:2015-07-20 11:05:40数据库技术版块每日发帖之星
日期:2015-07-20 11:05:432015年辞旧岁徽章
日期:2015-07-20 11:05:44
发表于 2012-07-18 14:11 |显示全部楼层
zhichizhichi

论坛徽章:
93
2015年辞旧岁徽章
日期:2019-10-10 10:51:15CU大牛徽章
日期:2014-02-21 14:21:56CU十二周年纪念徽章
日期:2020-10-15 16:55:55CU大牛徽章
日期:2014-02-21 14:22:07羊年新春福章
日期:2019-10-10 10:51:39CU大牛徽章
日期:2019-10-10 10:55:38季节之章:春
日期:2020-10-15 16:57:40ChinaUnix元老
日期:2019-10-10 10:54:42季节之章:冬
日期:2019-10-10 10:57:17CU大牛徽章
日期:2014-02-21 14:22:52CU大牛徽章
日期:2014-03-13 10:40:30CU大牛徽章
日期:2014-02-21 14:23:15
发表于 2012-07-18 14:14 |显示全部楼层
本帖最后由 seesea2517 于 2012-07-18 14:15 编辑

呃,看错了,讲的是排序规则,不是排序

论坛徽章:
381
CU十二周年纪念徽章
日期:2014-01-04 22:46:58CU大牛徽章
日期:2013-03-13 15:32:35CU大牛徽章
日期:2013-03-13 15:38:15CU大牛徽章
日期:2013-03-13 15:38:52CU大牛徽章
日期:2013-03-14 14:08:55CU大牛徽章
日期:2013-04-17 11:17:19CU大牛徽章
日期:2013-04-17 11:17:32CU大牛徽章
日期:2013-04-17 11:17:37CU大牛徽章
日期:2013-04-17 11:17:42CU大牛徽章
日期:2013-04-17 11:17:47CU大牛徽章
日期:2013-04-17 11:17:52CU大牛徽章
日期:2013-04-17 11:17:56
发表于 2012-07-18 14:38 |显示全部楼层
cenalulu 发表于 2012-07-18 10:04
在配置charset和collation的时候还有一个坑。
大部分情况下,大家都会记得 default-charater-set=utf8 。
...

这个很实用.

论坛徽章:
381
CU十二周年纪念徽章
日期:2014-01-04 22:46:58CU大牛徽章
日期:2013-03-13 15:32:35CU大牛徽章
日期:2013-03-13 15:38:15CU大牛徽章
日期:2013-03-13 15:38:52CU大牛徽章
日期:2013-03-14 14:08:55CU大牛徽章
日期:2013-04-17 11:17:19CU大牛徽章
日期:2013-04-17 11:17:32CU大牛徽章
日期:2013-04-17 11:17:37CU大牛徽章
日期:2013-04-17 11:17:42CU大牛徽章
日期:2013-04-17 11:17:47CU大牛徽章
日期:2013-04-17 11:17:52CU大牛徽章
日期:2013-04-17 11:17:56
发表于 2012-07-18 14:43 |显示全部楼层
本帖最后由 chenyx 于 2012-07-18 14:43 编辑

1. 下面每个参数选项各代表什么?
   character_set_client:客户端来源数据使用的字符集
   character_set_connection:连接层字符集   
   character_set_database:当前选中数据库的默认字符集
   character_set_filesystem:  底层文件系统
   character_set_results:查询结果字符集
   character_set_server:默认的内部操作字符集
   character_set_system:系统元数据(字段名等)字符集
   character_sets_dir: 这个自然是指明目录了

2. 如何更改字符集的设置?
   直接修改mysql的my.ini文件中的字符集键值
       default-character-set = utf8
       character_set_server = utf8
    修改完后,重启mysql的服务
    或者,客户程序在查询之前执行下"set names utf8"
3. 字符集对数据查询的影响?     
    字符集不一样的影响肯定就是乱码了,这肯定是编程需要考虑的问题,尽量在定义数据库的时候,就统一设定好mysql的字符编码.

论坛徽章:
0
发表于 2012-07-18 23:52 |显示全部楼层
本帖最后由 createrasd 于 2012-07-19 18:13 编辑

我从实用的角度讲吧,

1. 对应用而言,要设置的是:
character_set_client
character_set_connection
character_set_results
这三个要设置成一致,都设成数据表里的字符集。设置的方法可以是每次连接数据库之后,执行一下set names '字符集名'。也可以用开发语言自己的方法,比如MySQL-python就是MySQLdb.connect(...., charset='字符集名')

2. 对客户端而言,和应用类似:
mysql客户端:每次连入之后执行一下set names '数据表的字符集名',且SSH客户端软件也是设置成相同字符集时,就能正确显示中文。
navicat客户端:新建一个连接时,勾选'Use MySQL character set',就能正确显示中文。
phpmyadmin:好多年没用了,只记得登录页和登录后的首页可以设置。

3. 对建库、建表、建字段而言:
建立字段时,如果没有指定字符集,就会使用当前数据表的默认字符集。
建表时,如果没有指定字符集,就会使用当前数据库的默认字符集(character_set_database)。
建库时,如果没有指定字符集,就会使用mysql server的默认字符集(character_set_server)。

4. 校对(collection):
用utf8时,最常用utf8_general_ci,其次是utf8_unicode_ci。
GB的校对不熟悉。

5. 在my.cnf中
设置default-character-set相当于设置character_set_database和character_set_server。这条貌似不太对?我自己测的时候是这样。

6. 在web中
涉及到好几个地方。起决定作用的是http response报头中的Content-Type中的charset设置,这个设置成哪种编码,浏览器就会按哪种编码来解码。如果http response报头中没有设置charset,浏览器会根据html中的meta中指定的charset解码,如果连meta中也没设置,浏览器会按自己的默认值来解码。

设置http response报头中的Content-Type中的charset:可以在服务端开发语言中显式地修改报头,否则会按开发语言和web server的默认设置发送报头。

论坛徽章:
0
发表于 2012-07-19 09:41 |显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
发表于 2012-07-19 10:10 |显示全部楼层
强烈支持!!

论坛徽章:
0
发表于 2012-07-19 10:39 |显示全部楼层
回复 29# coralzd


    哈哈 老大要实际行动支持下啊。求分享~!!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP