免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2863 | 回复: 4
打印 上一主题 下一主题

问几个关于mysql默认字符编码的问题 [复制链接]

论坛徽章:
1
数据库技术版块每日发帖之星
日期:2016-01-01 06:20:00
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-09-13 00:10 |只看该作者 |倒序浏览
20可用积分
以前对mysql不了解,安装mysql的时候都是使用的默认编码latin1,后来发现这个不太好,后面安装的mysql就改成了gbk,另外还用过一些乱七八糟的PHP+mysql什么的套件安装的,这些默认字符集也各不相同

现在几个安装的mysql默认的字符设置都不相同,比如有的是
Server characterset:    latin1
Db     characterset:    latin1
Client characterset:    latin1
Conn.  characterset:    latin1

有的又是
Server characterset:    gbk
Db     characterset:    gbk
Client characterset:    utf8
Conn.  characterset:    utf8

总之都很乱,这样在从一个mysql里的数据库导入到另一个mysql里,有可能出会问题,即使能不出问题,也很麻烦,我想把他们都统一一下

------------------------------------------------------------

不过现在我对 mysql也还是了解的很少,想问一问大家,如果我直接把上面的四项字符集全部直接改成相同的,那么里面原有的数据库会不会出问题呢
比如原来是latin1的,我改成了gbk,和之前的正常运行相比
1.里面的数据库会不会出现乱码
2.程序连接数据库,从数据库读数据时,会不会出现乱码
3.导入导出时,会不会有编码的问题

--------------------------------------------------------------

另外,如果我想把他们统一改成某个字符集,是改成GBK好呢,还是改成UTF8好?
数据库里的数据要么是汉字要么是字母,通用性方面可以暂时不考虑
数据也不是很多,也不用从节省空间的角度考虑字符编码问题
主要是为了不同的mysql里的数据库相互导入导出方便,不容易出现乱码和丢失数据之类的问题


大家能不能给我一点建议呢

最佳答案

查看完整内容

如果我直接把上面的四项字符集全部直接改成相同的,那么里面原有的数据库会不会出问题呢(下面假设你把UTF8改成GBK)1.里面的数据库会不会出现乱码直接修改字符集,数据库不会对现有数据进行操作,因此现有数据保持原样。(参看总结3)2.程序连接数据库,从数据库读数据时,会不会出现乱码如果不手动去调整连接等编码的话,会出现乱码。因为你原有数据的编码格式还是UTF8,而你现在的连接编码已经是gbk了,所以会导致乱码。当然你set na ...

论坛徽章:
9
每日论坛发贴之星
日期:2016-01-04 06:20:00数据库技术版块每日发帖之星
日期:2016-01-04 06:20:00每日论坛发贴之星
日期:2016-01-04 06:20:00数据库技术版块每日发帖之星
日期:2016-01-04 06:20:00IT运维版块每日发帖之星
日期:2016-01-04 06:20:00IT运维版块每日发帖之星
日期:2016-01-04 06:20:00综合交流区版块每日发帖之星
日期:2016-01-04 06:20:00综合交流区版块每日发帖之星
日期:2016-01-04 06:20:00数据库技术版块每周发帖之星
日期:2016-03-07 16:30:25
2 [报告]
发表于 2009-09-13 00:10 |只看该作者
原帖由 number321 于 2009-9-13 00:10 发表
以前对mysql不了解,安装mysql的时候都是使用的默认编码latin1,后来发现这个不太好,后面安装的mysql就改成了gbk,另外还用过一些乱七八糟的PHP+mysql什么的套件安装的,这些默认字符集也各不相同

现在几个安装的 ...


如果我直接把上面的四项字符集全部直接改成相同的,那么里面原有的数据库会不会出问题呢(下面假设你把UTF8改成GBK)
1.里面的数据库会不会出现乱码
直接修改字符集,数据库不会对现有数据进行操作,因此现有数据保持原样。(参看总结3)

2.程序连接数据库,从数据库读数据时,会不会出现乱码

如果不手动去调整连接等编码的话,会出现乱码。
因为你原有数据的编码格式还是UTF8,而你现在的连接编码已经是gbk了,所以会导致乱码。
当然你set names utf8 ; set @@character_set_server=utf8 的话,还是能正常显示原来的数据。
很麻烦是把?所以这不是一个好想法(参看总结2)

3.导入导出时,会不会有编码的问题
导出的时候用--default-character-set=xxx 设置成latin1导出原有数据不会乱码,
而后插入的数据由于是gbk的编码,所以需要--default-character-set=gbk才不会出现乱码。

4. 另外,如果我想把他们统一改成某个字符集,是改成GBK好呢,还是改成UTF8好?
GBK对于所有字符都是2个字节
UTF8对于不同的字符使用1-3个字节,中文字符一般3个字节。
所以,中文多用GBK,字母多用UTF8,这样存储数据的体积会相对小一些。
如果不care数据体积,UTF8比较通用些。


总结一下:
1. 直接修改数据库的字符集是不合理的。
2. 如果想统一数据库字符集,你可以先把所有数据按原有格式导出(用mysqldump --default-character-set=xxx),然后再把mysql的所有字符集设置都设为gbk,然后修改dump文件中所有建表语句中的utf8全替换为gbk,再导入数据。
3. 所谓乱码不是数据存在的一种形式,而是连接编码和存储编码不一致导致的最终显示结果的错误。

4. 推荐你看一篇文章: http://hi.baidu.com/jackbillow/b ... 9ad2a0d8335aa6.html

[ 本帖最后由 cenalulu 于 2009-9-13 14:24 编辑 ]

论坛徽章:
0
3 [报告]
发表于 2009-09-13 01:13 |只看该作者
大的字符集修改成小的字符集没有问题。小的改大就不一定了;
建议UTF-8

论坛徽章:
8
综合交流区版块每周发帖之星
日期:2015-12-02 15:03:53数据库技术版块每日发帖之星
日期:2015-10-02 06:20:00IT运维版块每日发帖之星
日期:2015-10-02 06:20:00IT运维版块每日发帖之星
日期:2015-09-14 06:20:00金牛座
日期:2014-10-10 11:23:34CU十二周年纪念徽章
日期:2013-10-24 15:41:34酉鸡
日期:2013-10-19 10:17:1315-16赛季CBA联赛之北京
日期:2017-03-06 15:12:44
4 [报告]
发表于 2009-09-14 08:30 |只看该作者
原帖由 cenalulu 于 2009-9-13 11:21 发表


如果我直接把上面的四项字符集全部直接改成相同的,那么里面原有的数据库会不会出问题呢(下面假设你把UTF8改成GBK)
1.里面的数据库会不会出现乱码
直接修改字符集,数据库不会对现有数据进行操作,因此现有 ...



论坛徽章:
0
5 [报告]
发表于 2009-09-15 17:51 |只看该作者
以后记得要统一数据库编码拉
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP