首页 > 语言 > 关键词   >  MySQL最新资讯  > 正文

MySQL乱码问题深层分析

2009-03-06 15:27 · 稿源:IT168

查看系统的字符集用下面的命令:

1 mysql> SHOW VARIABLES LIKE 'character_set_%';

2 +--------------------------+-----------------------------------------+

3 | Variable_name | Value |

4 +--------------------------+-----------------------------------------+

5 | character_set_client | utf8 |

6 | character_set_connection | utf8 |

7 | character_set_database | utf8 |

8 | character_set_filesystem | binary |

9 | character_set_results | utf8 |

10 | character_set_server | utf8 |

11 | character_set_system | utf8 |

12 | character_sets_dir | E:\usr\MySQL Server 5.0\share\charsets\ |

13 +--------------------------+-----------------------------------------+

14 8 rows in set (0.00 sec)

15

可以看到,我的这几个变量都是一致的。但如果不一致呢?网上许多教程告诉你“你set names下就解决了”。

那么set names是什么呢? set names实际上就是同时设置了 character_set_client ,character_set_connection和 character_set_results 这三个系统变量。

例如在mysql命令行上输入 set names 'gbk' 命令等同于:

SET character_set_client = gbk;

SET character_set_connection = gbk;

SET character_set_results = gbk;

很多情况下,这样设置了之后就能把乱码问题解决了。但是还是不能完全避免出现乱码的可能,为什么呢?

因为character_set_client ,character_set_connection 这两个变量仅用于保证与 character_set_database 编码的一致,而 character_set_results 则用于保证 SELECT 返回的结果与程序的编码一致。

例如,你的数据库(character_set_database)用的是 utf8 的字符集,那么你就要保证 character_set_client ,character_set_connection 也是utf8的字符集。

而你的程序也许采用的并不是utf8 ,比如你的程序用的是gbk ,那么你若把 character_set_results 也设置为 utf8 的话就会出现乱码问题。此时你应该把 character_set_results 设置为gbk。这样就能保证数据库返回的结果与你的程序的编码一致。

到此应该就可以解决绝大多数我们遇到的乱码问题了,另外还必须强调的是,有时候乱码的出现有可能是以上几种原因混合造成的。

总而言之,我们应当尽量的保证数据库中的数据是正确的,就是客户端到服务器端或者服务器端到客户端转换的过程中不要产生乱码,那么问题处理起来就相对简单了。

四、总结

为便于大家记忆,总结为以下四点:

1、要保证发送的数据与数据库的字符集一致,即 character_set_client,character_set_connection 与character_set_database 一致。

2、要保证数据库中存储的数据与数据库编码一致,即数据的编码与character_set_database一致。

3、要保证 SELECT 的返回与程序的编码一致,即 character_set_results 与程序(PHP、Java等)编码一致。

4、要保证程序编码与浏览器编码一致,即程序编码与 一致。

附:

1、MySQL服务器能够支持多种字符集。可以使用SHOW CHARACTER SET语句列出可用的字符集:

mysql> show character set;

+----------+-----------------------------+---------------------+--------+

| Charset | Description | Default collation | Maxlen |

+----------+-----------------------------+---------------------+--------+

| big5 | Big5 Traditional Chinese | big5_chinese_ci | 2 |

| dec8 | DEC West European | dec8_swedish_ci | 1 |

| cp850 | DOS West European | cp850_general_ci | 1 |

| hp8 | HP West European | hp8_english_ci | 1 |

| koi8r | KOI8-R Relcom Russian | koi8r_general_ci | 1 |

| latin1 | cp1252 West European | latin1_swedish_ci | 1 |

| latin2 | ISO 8859-2 Central European | latin2_general_ci | 1 |

| swe7 | 7bit Swedish | swe7_swedish_ci | 1 |

| ascii | US ASCII | ascii_general_ci | 1 |

| ujis | EUC-JP Japanese | ujis_japanese_ci | 3 |

| sjis | Shift-JIS Japanese | sjis_japanese_ci | 2 |

| hebrew | ISO 8859-8 Hebrew | hebrew_general_ci | 1 |

| tis620 | TIS620 Thai | tis620_thai_ci | 1 |

| euckr | EUC-KR Korean | euckr_korean_ci | 2 |

| koi8u | KOI8-U Ukrainian | koi8u_general_ci | 1 |

| gb2312 | GB2312 Simplified Chinese | gb2312_chinese_ci | 2 |

| greek | ISO 8859-7 Greek | greek_general_ci | 1 |

| cp1250 | Windows Central European | cp1250_general_ci | 1 |

| gbk | GBK Simplified Chinese | gbk_chinese_ci | 2 |

| latin5 | ISO 8859-9 Turkish | latin5_turkish_ci | 1 |

| armscii8 | armSCII-8 armenian | armscii8_general_ci | 1 |

| utf8 | UTF-8 Unicode | utf8_general_ci | 3 |

| ucs2 | UCS-2 Unicode | ucs2_general_ci | 2 |

| cp866 | DOS Russian | cp866_general_ci | 1 |

| keybcs2 | DOS Kamenicky Czech-Slovak | keybcs2_general_ci | 1 |

| macce | Mac Central European | macce_general_ci | 1 |

| macroman | Mac West European | macroman_general_ci | 1 |

| cp852 | DOS Central European | cp852_general_ci | 1 |

| latin7 | ISO 8859-13 Baltic | latin7_general_ci | 1 |

| cp1251 | Windows Cyrillic | cp1251_general_ci | 1 |

| cp1256 | Windows Arabic | cp1256_general_ci | 1 |

| cp1257 | Windows Baltic | cp1257_general_ci | 1 |

| binary | Binary pseudo charset | binary | 1 |

| geostd8 | GEOSTD8 Georgian | geostd8_general_ci | 1 |

| cp932 | SJIS for Windows Japanese | cp932_japanese_ci | 2 |

| eucjpms | UJIS for Windows Japanese | eucjpms_japanese_ci | 3 |

+----------+-----------------------------+---------------------+--------+

36 rows in set (0.00 sec)

举报

  • 相关推荐
  • 大家在看
  • CleanMyMac上线云存储清理功能

    CleanMyMac推出全新"云存储清理"功能,支持iCloud和OneDrive两大主流云服务。该功能提供统一可视化界面,可批量删除云端和本地的重复文件,或仅解除同步保留云端文件。通过滚动列表和可视化图谱两种模式,帮助用户高效管理存储空间。所有操作均在本地完成,确保数据安全。软件提供7天免费试用,并推出Basic基础版和Plus高级版两种套餐,现有用户可免费升级体验Plus全部功能。未来计划支持腾讯云、百度云等中国本土云平台,持续优化Mac存储管理体验。

  • 幼童爬到13层阳台外悬空玩引体向上 拍摄者:腿都吓软了

    近日,一段惊险视频在网络上引发广泛关注,视频中两名幼童在贵州省贵阳市一小区的阳台外玩耍,场景让众多网友看得心惊胆战。画面显示,两名幼童都爬到了阳台外侧,其中一名孩子两脚悬空,竟扒着玻璃做起了“引体向上”的动作,视频拍摄者被吓得连连惊呼。 据悉,该视频拍摄于8月7日,事发地点位于贵阳市北京西路附近的一小区,两名孩子所在的楼层高达13楼。视�

  • 185亿元!京东拟收购德国零售商Ceconomy

    据媒体报道,京东集团宣布通过旗下德国子公司JINGDONG Holding Germany GmbH,向欧洲消费电子零售巨头CECONOMY AG所有股东发起自愿公开收购要约,拟以每股4.60欧元现金收购其全部流通股份,并建立战略合作伙伴关系。 目标公司CECONOMY估值约22亿欧元(约合人民币185亿元),旗下运营MediaMarkt和Saturn两大品牌,在欧洲12国拥有870余家门店。该公司于2017年从麦德龙集团分拆独立,是欧洲�

  • 轿车冲下5层楼高堤坝女子奇迹生还:坠落瞬间被甩出

    ​近日,四川巴中发生了一起令人心惊胆战的交通事故。一女子驾驶小轿车在行驶过程中突然失控,从高达约五六层楼的堤坝上猛冲而下。车辆在坠落过程中撞断了堤坝的栏杆,随后继续下坠,而女子在车辆坠落瞬间被甩出驾驶室,竟先于车辆落地。 据目击者刘先生描述,当时的情况十分危急。堤坝高度相当于五六层楼,女子坠落时恰好摔在了下方的草坪上,并被一棵小树阻

  • 女子35层坠楼奇迹生还 历经50余天救治重获新生

    ​6月10日清晨5时许,中南大学湘雅三医院上演了一场生命奇迹——一名从35楼坠落的27岁女子经多学科联合救治,成功脱离生命危险。据参与抢救的重症医学科副主任医师邢伟介绍,患者被送医时已出现颅内出血、脑挫裂伤、锁骨及骨盆多发骨折,同时伴有肝破裂、肠穿孔等严重损伤,全身多器官功能濒临衰竭。 医院立即启动绿色通道,从术前检查到进入手术室仅用不到1小时

  • 夸克月人均打开65次 断层领先 是百度的6倍以上

    在QuestMobile 2025年AI应用市场半年报中,夸克的AI搜索插件以月人均64.9次的使用频次,遥遥领先其他AI搜索引擎。 这一数据不仅远超同类产品,更是百度AI搜索的6倍以上,展现出断层领先的用户粘性。

  • 山石网科叶海强解码“双A战略”:ASIC 解放算力、AI 解放人力

    山石网科通过自主研发ASIC安全专用芯片实现战略变革,构建"双A战略"(ASIC+AI)突破行业同质化竞争。其ASIC芯片将高频调用代码固化,释放CPU算力,显著提升系统性能与稳定性,同时通过AI优化研发流程和服务效率,实现人力成本降低。公司规划2023-2025年完成全产品线向ASIC平台切换,2026-2028年进入规模跃升期,目标收入突破20亿元。山石网科强调不盲目追逐AI风口,而是聚焦"流程优化",通过AI提升编码效率30%,运维问题解决效率提升25%。这种"技术筑基、效率突围"的策略,正在帮助公司在行业洗牌中构建差异化竞争优势。

  • 远超行业标准!研祥金码读码器寿命突破40000小时

    Regem Marr研祥金码智能读码器通过严格测试,产品寿命超4万小时,可持续稳定运行至少4.5年。采用铝合金多开孔支架,散热性能优异,CPU温度降低27%,机壳温度降低37%。宽温设计使工作温度范围达-25℃至55℃,适应食品冷库、高温锻造等极端环境。防护等级达IP65,高于国家标准3个防尘等级和5个防水等级,实现防水防尘。产品经过高温高湿等复杂环境测试,确保各类场景下的稳定运行能力。

  • 曝iPhone屏幕将迎来大升级:苹果将首发全新双层OLED屏

    苹果制定了一项为期两年的生产计划,旨在将更先进的OLED技术应用于iPhone机型,这意味着搭载双层OLED的iPhone将在2028年后问世。 目前苹果iPad Pro已经商用双层OLED屏幕,英文名为Tandem OLED”,它在传统单层OLED的基础上额外添加一层发光层,这种设计使得原本单层OLED的发光需求能够平摊到两层OLED上,从而极大地减轻每个发光层所承受的电场强度,延缓发光材料的老化速度。 并�

  • 从构建方法论到服务加码,华为加速释放AI时代制造业数智潜能

    华为提出"三层五阶八步"数字化转型方法论,助力制造业企业应对AI时代挑战。文章指出制造业数字化转型面临技术架构创新、服务体系重构和人才技能升级三大挑战。华为通过重构"规划-建设-运营-迭代"一体化服务体系和"线下+线上"协同模式,已在汽车制造等领域实现研发效率提升30%、排产效率提升20%等显著成效。其核心在于将工业Know-how与AI技术深度融合,通过生态协同释放产业潜能。目前华为已建立覆盖全国2800个区县的服务网络,联合2500家伙伴构建智能制造解决方案。文章强调真正的智造不仅是技术突破,更要让每个产业细胞在变革中焕发新生。

这篇文章对你有价值吗?

今日大家都在搜的词: