MySQL 4.1后对字符集支持的高度灵活性着实给包括我在内的许多人带来了不小的麻烦。百度和Google中搜索MySQL 乱码结果都在20万页以上。。。显然,其灵活性的代价就是复杂性。
关于字符集需要明确以下几点:
一种字符集(character set或charset )对应若干种字符集校正(character set collation),其中只有一种是默认的。而不同的字符集不可能对应同一种字符集校正。
字符集校正是一组规则,用于对对应字符集中的字符进行排序、分辨大小写,音调等等,与字符集的具体编码方法是没有关系的,可以说乱码与字符集校正的关系最多是间接的。
在数据存储层面上的字符集及字符集校正设置由高层至底层分四个层次:服务器,数据库,表,字段。设置方法有多种,而且每个层次都可以设置独立的字符集和其校正。存储于各层中的数据究竟是何字符集,使用什么字符集校正又有以下规则:
设置的优先级由下至上依次降低,如设置了字段的字符集为“utf8”和其校正为“utf8_general_ci”,那么不论其高层的表等如何设置,存储其中的数据都是“utf8”的,以“utf8_general_ci”为其字符集校正。
如某层没有设置,即依照其高一层的设置;所有都未设置按默认设置。
如果只设置了字符集,字符集校正自动依照其对应的默认值被系统设置。如只设某个表的字符集为“utf8”,那其校正会被自动设置为“utf8_general_ci”;反之,只设置了字符集校正,字符集自动被按其对应的字符集设置。
在与客户端连接层面上牵涉到另外三种字符集和字符集校正,这是客户端发送请求时可以更改的:
character_set_client ,这是用户告诉MySQL查询是用的什么字符集。
character_set_connection ,MySQL接受到用户查询后,按照character_set_client将其转化为character_set_connection设定的字符集。
character_set_results , MySQL将存储的数据转换成character_set_results中设定的字符集发送给用户。
中文世界中使用较多的字符集有UTF8,GB2312,GBK,BIG5等。由于东方文字有很多全角字符,当转换为对应字母文字的字符集时,没有对应编码的全角字符必然显示为乱码,反之则不一定有。
以UTF8为例,首先假设数据库字段设置的字符集是UTF8,则中文乱码出现的原因可能有以下几个:
查询数据库时,character_set_client被设置或默认其他字符集。
提交数据至数据库时,提交数据为UTF8,而character_set_client ,character_set_connection 设置或被默认设为其他字符集,则存入数据库的数据即为乱码。再查询出的必然是乱码。
不用去管字符集校正。
若字段的字符集不是UTF8,不论如何设置,查询、更新数据字段都应显示出或多或少的乱码。
我总结了一下,东方字符集转西方字符集,东方字符全部乱码;西方字符集转东方字符集可能有少量无码;东方字符集互转,可能有部分误码。
所以出现乱码应首先明确使用何种字符集,然后做如下检查:
依次检查MySQL由底层字段到高层系统合层字符集。如有误,导出数据后设置正确后再按正确的字符集导出。
检查character_set_client是否被配置正确。
检查character_set_client ,character_set_connection 是否被配置正确。
程序里使用set names gb2312 之后,从数据库里读出来的,就是GB2312编码了。
数据库只是用UTF8存储
分享到:
相关推荐
### MySQL字符集与乱码问题解析 在MySQL数据库管理中,字符集的配置与使用是十分重要的环节之一,尤其在处理多语言环境的数据时更是如此。如果字符集配置不当,很容易导致数据插入、查询过程中出现乱码问题。本文将...
### 设定 MySQL 字符集解决终端乱码 在处理数据库操作时,经常遇到的一个问题是字符集编码不一致导致的数据乱码问题。对于 MySQL 数据库来说,合理设置字符集可以有效避免此类问题的发生。本文将详细介绍如何通过...
查看mysql字符集MySQL 乱码的根源是的 MySQL 字符
### MySQL字符集的基本概念 字符集(Character Set)定义了数据在存储和处理时所采用的编码标准,而校对集(Collation)则规定了字符集下的排序规则和比较方式。在MySQL中,主要涉及以下几个关键变量: - `...
### 精通MySQL字符集与校对集 在MySQL中,正确地管理和配置字符集与校对集对于确保数据的正确性和一致性至关重要。字符集主要用于定义如何存储和表示文本数据,而校对集则定义了如何比较这些文本数据。本篇文章将...
本文将详细探讨“MySQL_MySQL字符集互转”这一主题,以及如何利用工具如"MSSQL2MySQLSync"进行数据库之间的转换与同步。 MySQL是一种广泛使用的开源关系型数据库管理系统,其支持多种字符集,包括UTF-8、GBK等。...
《MySQL字符集与乱码问题分析》一文深入探讨了字符编码的历史背景、技术细节以及在MySQL中的应用,尤其关注解决常见的乱码问题。本文将根据提供的内容摘要,详细阐述其中涉及的关键知识点。 ### 字符集背景知识 ##...
以下将详细讲解MySQL字符集的概念、设置方法以及在实际应用中可能出现的问题和解决方案。 1. **字符集概念**: - **字符集(Character Set)**:是一系列字符的集合,例如ASCII、GBK、UTF-8等,定义了字符的编码...
Mysql字符集编码详解 Mysql数据库中的字符集编码问题是许多开发者经常遇到的一个问题,特别是在JAVA项目中。解决这个问题需要从多方面入手,包括服务器、数据库、数据表和连接等四个层次。这篇文章将详细介绍如何...
MySQL字符集设置原理及其常见问题解决是数据库管理中不可或缺的一部分,尤其对于处理多语言或特殊字符的数据时,正确的字符集配置至关重要。字符集定义了数据库、表和字段能存储的字符范围,它决定了数据的编码和...
#### 三、MySQL字符集详解 1. **MySQL 4.1之前的版本**: - 在MySQL 4.0及之前版本中,主要使用的是`latin1`字符集,这是一个单字节编码方案,仅支持西欧语言。 - 这种字符集对于中文等多字节编码的语言支持不佳...
### MySQL字符集详解 在MySQL数据库管理中,正确地理解和设置字符集对于数据的准确存储和检索至关重要。本文将深入探讨MySQL字符集的基础概念、设置方法以及如何在实际操作中进行字符集的转换。 #### 一、理解...
7_MYSQL视频教程 字符集操作原理与乱码解决方案character_set_client_character_set_connection_character_set_results
这篇文档将深入探讨MySQL字符集的工作原理,常见问题及解决方案。 一、MySQL字符集基础 1. 字符集(Character Set):用于定义系统可以识别和存储的一组字符,如ASCII、GBK、UTF-8等。 2. 集合排序规则(Collation...
这将改变客户端的字符集,使其与数据库的字符集相匹配,从而避免乱码的出现。 ### 结论 乱码问题在数据库管理和应用中是一个不容忽视的技术难题。通过细致地检查并调整MySQL的字符集设置,不仅可以解决当前遇到的...
#### 一、了解MySQL字符集配置 在解决MySQL乱码问题前,首先需要了解MySQL中与字符集相关的配置项及其含义: 1. **`character_set_system`**:系统默认使用的字符集。 2. **`character_set_server`**:服务器默认...
MySQL数据库内部也支持多种字符集,可以通过配置文件`my.cnf`或`my.ini`来设置全局的字符集,也可以在创建数据库或表时指定特定的字符集。常用的字符集有`latin1`、`utf8`、`gbk`等,其中`utf8`对中文的支持较好。 ...