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

sugarforever 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.
...全文
300 20 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
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编码来储存汉字。

21,893

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧