mysql的数据库值问题

我在设计数据库的时候,定义一张表的主键为id 类型varchar 长度为25 为当前时间+随机码生成的一串数字;
但是在查询的时候有:比如 select * from table where id = 201008171424530375 这个数字就出不来结果非要改成select * from table where id = '201008171424530375' 但是我的主键都是通过程序生成的,不是所有的结果都会这样,其他的很多类似 select * from table where id = 201008171424530376 这样的查询不用''都是可以找到结果的,请问这是什么原因造成的?

[quote]飞雪无情 写道
就是你的in里有10个id,都没有加引号,比如 in(123,1231,34234,4545,346436,....),然后结果出来九条是吧?难道是in函数认为前面的九个条件可以加引号,也可以不加,只是最后一个比较的时候因为没加引号所以查询不到了。。

哈哈 你的这种想法我也想到了,我单独的改变了IN里面的顺序,起结果还真就是那个楼市找不到,不管它排第几,当然咯这里只是用楼市来调试 [/quote]

随便改变顺序还是楼市。。嘿嘿。我观察了,你的楼市的id是最小的,也就是第一个数据。。估计就是因为这,谁是第一个数据谁倒霉,别管inli的id顺序,就查不到第一个。。嘿嘿

因为你的“主键为id 类型varchar ” 类型是varchar。。所以必须加上引号。。定义成bigInt就好了

这个问题确实很奇怪,可能和MySql自身的机制有关,你按标准语法写,暂时解决这个问题。既然类型为varchar,那么就加上单引号,这才合乎语法。

你定义的是 varchar
[code="java"]select * from table where id = ‘201008171424530376’[/code]

统一 按这个标准写法就 OK !

[quote]比如 select * from table where id = 201008171424530375 这个数字就出不来结果非要改成select * from table where id = '201008171424530375' [/quote]

[quote]如果是我都没带上引号应该所有的值都不会找到啊,怎么会找到了那么多[/quote]

你这两个有矛盾啊。你一开始命名说的不加引号就出不来结果的,怎么后来变了。。

不加引号就应该没有结果的。。

就是你的in里有10个id,都没有加引号,比如 in(123,1231,34234,4545,346436,....),然后结果出来九条是吧?难道是in函数认为前面的九个条件可以加引号,也可以不加,只是最后一个比较的时候因为没加引号所以查询不到了。。

[quote]
你可以看下我传上来的图片附件,比如我找楼市不带引号就找不到,找其他的不带引号却可以得到结果 [/quote]

你这说的是in查询的情况下吧。单个查询这样select * from table where id = 201008171424530375都查不到吧?

这个比较怪异。不过还是我刚开始说的,如果你是varchar的,就是使用引号,都使用。。
这样标准。也能解决你的问题

弱弱的问下下: :wink:
那个 楼市的 ID 是否后面有个空格呢?

[quote]非也非也哦,我单个查询的时候 如果查询的不是楼市那个,照样可以查询出来 哈哈,太搞笑了 [/quote]

祁门怪事。。。唉。还是用标准方式吧。全加引号。。OK