http://www.themysql.com/mysql/mysql中latin1与中文.html

关于Latin1见百度百科吧


不同的字符集编码了不同的字符,latin1中包含有191个可打印字符,其余是控制字符或者扩展的欧洲特殊字符;不包含中文字符。

之所以可以在latin1中保存和显示中文字符请看下面的示例以及说明:
latin1和ascii都可以存储中文(ascii就不列举)

CREATE TABLE `user` (
`name` VARCHAR(100) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1
SET names latin1;
INSERT INTO USER VALUES("我们");
mysql>select * FROM USER;
+--------+
| name   |
+--------+
| 我们   |
+--------+
1 ROW IN SET (0.00 sec)

使用set names latin1之后,character_set_client、character_set_connection、character_set_results都将设置为ascii编码,不会做任何编码转化(编码转化会涉及到重新编码,因为不同的字符集对同一个字符的编码不一样;以及新字符集无法编码旧字符集中字符的问题)。

如果改成set names utf8,则insert的时候,character_set_connection->column character set时,会将utf8编码强行转化成latin1,转化时超出latin1编码范围的字符全部转化成0x3F(latin1中的?)。