稍微说两句,这个问题面广,不是一两句能说全的字符集实际就是电脑里表示字符的方式,所有字符在电脑内都是由一个数字来表示的(因为电脑里只有0和1组成的数字),
比如A是65,B是66。这是在ascii里的对应,(ascii范围一般是0-128)
gb2312是汉字的比较早的一个字符集,用两个字节表示一个汉字,每个字节的第一位都是1(也就是>128的两个字节)
在西欧字符里一些法语德语字符是不在ascii范围内的,在latin1(iso8859-1)里它们也用一个>128的字节来表示,
因此,latin1和gb2312实际上是有冲突的,当给出两个>128字节的时候,可能是两个西欧字符,也有可能是一个汉字。为解决类似问题,后来开始制定unicode字符集,每个字符由2个字节(或4个字节),即ucs2或ucs4。目的是包含目前世界上所有字符,拉丁字符。。中文。。啊拉伯文。。俄文等等。与ucs2、ucs4对应的有utf8和utf16字符集,有一一对应的关系,但是utf是变长的,而且是有边界的,适合用于传输中,丢失一个字节后不会造成后面的字符乱码。
所谓 连接校对,应该是说Collations,
它的作用是定义字符集中字符的大小关系,即a是否<b, B是否小于a 等等
比如:
ucs2_bin    Unicode (multilingual), Binary   是按二进制数值比较大小,
ucs2_general_ci    Unicode (multilingual), case-insensitive   应该是一般字典顺序,大小写无关
关于mysql乱码,以前有不少帖子讲过了,可以找一下看看,或者看mysql手册的character set一章,关键是几个变量的设置,
mysql会自动根据你的变量的设置在不同编码间做转换,这个是引起乱码的原因。