访问MySQL的一个神奇的问题,'aaaaaa'等于'妹妹美'?

sugarforever Nokia 开发组长/高级工程师/技术专家  2010-07-05 10:02:08
mysql> create table a (name varchar(32));
Query OK, 0 rows affected (0.50 sec)

mysql> insert into a values ('aaaaaa');
Query OK, 1 row affected (0.03 sec)

mysql> insert into a values ('妹妹美');
Query OK, 1 row affected (0.06 sec)

mysql> select count(distinct name) from a;
+----------------------+
| count(distinct name) |
+----------------------+
| 1 |
+----------------------+
1 row in set (0.05 sec)

mysql>

高手看看,只是为什么?为什么'aaaaaa'等于'妹妹美'?我竟以为count出来应该是2.
...全文
218 点赞 收藏 20
写回复
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
wisword 2010-07-08
字符编码类型改为gbk_bin
注意后面的bin
回复
myhope88 2010-07-08
没遇到过,帮顶下
回复
helloyou0 2010-07-08
那边的14楼讲了错误原因.

回复
sinopf 2010-07-07
就是编码问题而已,呵呵
回复
xuzuning 2010-07-07
[Quote=引用 http://topic.csdn.net/u/20100705/21/c101b33f-2abf-447e-a4e6-0e322834e99f.html?seed=1645605709&r=66769697#replyachor 25 楼 sugarforever 的回复:]
我用--default-character-set=latin1导出的话得到的就是下面的内容
INSERT INTO `user` VALUES (1,'大虾','大虾',1,

那么在这个情况下,我导入我的数据库时mysql也该指定成--default-character-set=latin1?

这种情况下,我就得在我的程序里设置成set names latin1?

是这么个流……
[/Quote]
如果你导出的sql中没有乱码,那你的导出参数是正确的!
导出的sql文件是ANSI的,你可用工具软件查看编码类型,也可用记事本打开并在“另存为”对话框中查看
你可以用工具或自编程序将sql文件的编码转换成你的数据库要求的编码
回复
mingfish 2010-07-07
每日路过10积分
回复
zmacro 2010-07-07
up~~~~~~~~~~~~~~~~
回复
有的时候确实很怪。标记一下。
回复
sugarforever 2010-07-06
我的这个问题在mysql版也有所跟踪。
http://topic.csdn.net/u/20100705/21/c101b33f-2abf-447e-a4e6-0e322834e99f.html?seed=1645605709&r=66769697#replyachor

大家帮忙看看问题所在吧。

想得头皮发麻了。恼火恼火
回复
北京不不 2010-07-06
很奇怪。啊。
回复
Dleno 2010-07-06
select count(distinct name) from a group by name;
回复
小雨转晴 2010-07-06
mysql> create table a (name varchar(32));
Query OK, 0 rows affected

mysql> insert into a values ('aaaaaa');
Query OK, 1 row affected

mysql> insert into a values ('妹妹美');
Query OK, 1 row affected

mysql> select count(distinct name) from a;
+----------------------+
| count(distinct name) |
+----------------------+
| 2 |
+----------------------+
1 row in set

mysql> set names gbk;
Query OK, 0 rows affected

mysql> select count(distinct name) from a;
+----------------------+
| count(distinct name) |
+----------------------+
| 2 |
+----------------------+
1 row in set

mysql> set names utf8;
Query OK, 0 rows affected

mysql> select count(distinct name) from a;
+----------------------+
| count(distinct name) |
+----------------------+
| 2 |
+----------------------+
1 row in set

mysql> set names gb2312;
Query OK, 0 rows affected

mysql> select count(distinct name) from a;
+----------------------+
| count(distinct name) |
+----------------------+
| 2 |
+----------------------+
1 row in set
mysql> select version();
+---------------------+
| version() |
+---------------------+
| 5.0.22-community-nt |
+---------------------+
1 row in set

mysql>

最后是我的版本,我觉得你的环境有问题,对于中文的编码可能性很大。
回复
CunningBoy 2010-07-06
set name gb2312再试试
回复
Gdj 2010-07-06
gbk编码下是这样的了。有些读音有点相似的都会被认为同一个字。所以我喜欢用latin1
回复
jlzan1314 2010-07-06
搞晕的了,妹妹美根本就没插入进去,但为什么报ok了?
回复
sugarforever 2010-07-05
mysql> set names utf8;
Query OK, 0 rows affected (0.00 sec)

mysql> insert into a values ('妹妹美');
ERROR 1366 (HY000): Incorrect string value: '\xC3\xC3\xC3\xC3\xC3\xC0' for colum
n 'name' at row 1
mysql>

在设置成utf8后,插入中文数据又有错了。
回复
sugarforever 2010-07-05

mysql> select * from a;
+--------+
| name |
+--------+
| aaaaaa |
| 妹妹美 |
+--------+
2 rows in set (0.00 sec)

mysql>

查询结果显示确实有两条记录。第二条记录应该没有插入失败
回复
CunningBoy 2010-07-05
第2条记录插入失败,因为你的文字编码不对,要用set name utf8设置成utf-8编码来储存汉字。
回复
发动态
发帖子
基础编程
创建于2007-09-28

2.1w+

社区成员

从PHP安装配置,PHP入门,PHP基础到PHP应用
申请成为版主
社区公告
暂无公告