问题描述
我在设计数据库的时候,定义一张表的主键为id 类型varchar 长度为25 为当前时间+随机码生成的一串数字;但是在查询的时候有:比如 select * from table where id = 201008171424530375 这个数字就出不来结果非要改成select * from table where id = '201008171424530375' 但是我的主键都是通过程序生成的,不是所有的结果都会这样,其他的很多类似 select * from table where id = 201008171424530376 这样的查询不用''都是可以找到结果的,请问这是什么原因造成的? 问题补充:飞雪无情 写道
解决方案
引用飞雪无情 写道就是你的in里有10个id,都没有加引号,比如 in(123,1231,34234,4545,346436,....),然后结果出来九条是吧?难道是in函数认为前面的九个条件可以加引号,也可以不加,只是最后一个比较的时候因为没加引号所以查询不到了。。哈哈 你的这种想法我也想到了,我单独的改变了IN里面的顺序,起结果还真就是那个楼市找不到,不管它排第几,当然咯这里只是用楼市来调试 随便改变顺序还是楼市。。嘿嘿。我观察了,你的楼市的id是最小的,也就是第一个数据。。估计就是因为这,谁是第一个数据谁倒霉,别管inli的id顺序,就查不到第一个。。嘿嘿
解决方案二:
引用非也非也哦,我单个查询的时候 如果查询的不是楼市那个,照样可以查询出来 哈哈,太搞笑了 祁门怪事。。。唉。还是用标准方式吧。全加引号。。OK
解决方案三:
弱弱的问下下: 那个 楼市的 ID 是否后面有个空格呢?
解决方案四:
引用你可以看下我传上来的图片附件,比如我找楼市不带引号就找不到,找其他的不带引号却可以得到结果 你这说的是in查询的情况下吧。单个查询这样select * from table where id = 201008171424530375都查不到吧?这个比较怪异。不过还是我刚开始说的,如果你是varchar的,就是使用引号,都使用。。这样标准。也能解决你的问题
解决方案五:
就是你的in里有10个id,都没有加引号,比如 in(123,1231,34234,4545,346436,....),然后结果出来九条是吧?难道是in函数认为前面的九个条件可以加引号,也可以不加,只是最后一个比较的时候因为没加引号所以查询不到了。。
解决方案六:
引用比如 select * from table where id = 201008171424530375 这个数字就出不来结果非要改成select * from table where id = '201008171424530375' 引用如果是我都没带上引号应该所有的值都不会找到啊,怎么会找到了那么多你这两个有矛盾啊。你一开始命名说的不加引号就出不来结果的,怎么后来变了。。不加引号就应该没有结果的。。
解决方案七:
你定义的是 varcharselect * from table where id = ‘201008171424530376’统一 按这个标准写法就 OK !
解决方案八:
这个问题确实很奇怪,可能和MySql自身的机制有关,你按标准语法写,暂时解决这个问题。既然类型为varchar,那么就加上单引号,这才合乎语法。
解决方案九:
因为你的“主键为id 类型varchar ” 类型是varchar。。所以必须加上引号。。定义成bigInt就好了