电脑技术学习

MySQL乱码问题深层分析

dn001

在实际生活中,大多数字符集有许多字符:不仅仅是‘A’和‘B’,而是整个字母表,有时候有许多种字母表,或者一个东方的(比如中文、日文、韩文、藏文、泰文等等)使用上千个字符的书写系统,还有许多特殊符号和标点符号。并且在实际生活中,大多数校对规则有许多个规则:不仅仅是大小写不敏感,还包括重音符不敏感(“重音符 是附属于一个字母的符号,象德语的‘?’符号)和多字节映射(例如,作为规则‘?’=‘OE’就是两个德语校对规则的一种)。

(以上摘自MySQL 5.1 手册。更多内容可参见:http://dev.mysql.com/doc/refman/5.1/zh/charset.html)

MySQL 4.1.x开始支持以下这些事情

l 使用多种字符集(Character Set)来存储字符

l 使用多种校对规则(Collation)来比较字符串

l 在同一台服务器、同一个数据库或甚至在同一个表中使用不同字符集或校对规则来混合字符串

l 允许定义任何级别的字符集和校对规则

MySQL 4.1及以上版本的字符集支持(Character Set Support)有两个方面:字符集(Character Set)和校对规则(Collation)。 字符集和校对规则有4个级别的默认设置:服务器(server),数据库(database),数据表(table)和连接(connection)。

MySQL 中是根据下面几个变量确定服务器端和客户端用的什么字符集:

character_set_client     客户端字符集

character_set_connection   客户端与服务器端连接采用的字符集

character_set_results     SELECT查询返回数据的字符集

character_set_database    数据库采用的字符集

MySQL的字符集处理是这样的:

1、发送请求。

1)客户端发送请求到服务器端。