关于数据库的编码问题
关于数据库的编码问题
今天在做导师互选分配结果的接口,遇到了一个多表查询的问题,愣是让我找了半天还不知道问题出现在哪里。出现问题的语句如下:
// A,B,C分别为表名
$A = "user_student";
$B = "user_teacher";
$C = "tc_result";
$sql = "SELECT $A.name,$A.serialNum,$B.name,$B.workNumber From $A,$B,$C
WHERE $A.sid = $C.sid AND $C.workNumber = $B.workNumber";
执行词条sql语句出现的问题是没有返回结果,然而执行下面这条语句是有结果的
$sql = "SELECT $A.name,$A.serialNum,$C.workNumber From $A,$C
WHERE $A.sid = $C.sid ";
上面这条语句返回A/C表的连接结果。
因为两条语句基本相似,后来我试着用如下语句:
$sql = "SELECT $B.name,$B.workNumber From $B,$C
WHERE $C.workNumber = $B.workNumber ";
然后问题就来了,这条语句是没有结果的。首先我的反应是,不会是编码问题吧?然后又想了想,我好像一开始就指定是utf8的编码。就把这个问题忽略掉了。接着,我就想不会是varchar类型不能这么用吧?然后找了一下数据库原理的书脑补了一下,发现是可以这么用的。接着,我就炸了,各种搜索,各种联表查询都看了还是找不到问题所在。
这就让我一度怀疑人生了,虽然我数据库原理这门课学得不咋样,但是基本的sql语句我还是会的。(人生重来算了。。。)
这时就要感谢小侨(汪培侨),我请他来帮忙。过程如下:
十分钟:。。。sql语句没问题啊!这是什么鬼错误。。。
二十分钟:不会是varchar类型不能这么用吧。。。 - - !,我们两个还在挣扎中。。。
三十分钟:我们试试不用IDE吧,直接把这条在mysql黑框子运行一下。运行之后就有结果了
ERROR 1267 (HY000): Illegal mix of collations (utf8_unicode_ci,IMPLICIT) and (utf8_general_ci,IMPLICIT) for operation '='
搞了半天回到了编码问题,想想还是太年轻了,utf8的排序规则又不止一种。这个问题充分告诉我们数据库要好好学啊,少用的IDE,多敲敲命令行,增长增长自己的见识
博主已搬家到csdn了