相关文章推荐
机灵的皮蛋  ·  _itoa_s, _itow_s ...·  7 月前    · 
大鼻子的小虾米  ·  Go语言 command ...·  1 年前    · 
CREATE TABLE `user_desc` ( `ID` int(11) NOT NULL AUTO_INCREMENT, `USER_NAME` varchar(255) DEFAULT NULL COMMENT '用户名', `AGE` int(5) DEFAULT NULL COMMENT '年龄', `COUNTRY` varchar(50) DEFAULT NULL COMMENT '国家', `USER_STATUS` varchar(5) DEFAULT '1' COMMENT '用户状态(0:弃用,1:在线,2:下线)', PRIMARY KEY (`ID`) ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;
ID USER_NAME AGE COUNTRY USER_STATUS
1 周杰伦 33 中国 1
2 胡歌 22 中国 2
3 欢欢 21 美国 0

查询Sql

-- 查询sql,查询用户状态为在线的, 并拼接一个计划中应查不到数据的参数
SELECT
    USER_NAME,
    COUNTRY,
    USER_STATUS
    user_desc
WHERE
    USER_STATUS IN ('1', '')

查询结果:

IDUSER_NAMEAGECOUNTRYUSER_STATUS
1周杰伦33中国1
3欢欢21美国0

把USER_STATUS为0的数据查出来了,而我当时只需要状态为1的数据

后来发现是由于MySql中会将''空字符串当做数值0来处理

而当时这么写是由于业务需求有要求,我们为了开发方便,就在只查单个状态时,想要加上一个查不出其他状态数据的条件,我们的处理方案是

将字段类型改为varchar类型

再使用相同的查询sql后,数据正常显示

虽然最后我们找到了问题所在, 但是这种sql还是感觉不够整洁, 因此我们又在生成sql前进行了数据的处理, 当只需要一种状态时,就只查一种状态的值,在sql不出错的情况下又保证了整洁性, 在此记录下这个踩过的坑。

才疏学浅,如文中有错误,感谢大家指出。  

表结构:-- 表的ddlCREATE TABLE `user_desc` ( `ID` int(11) NOT NULL AUTO_INCREMENT, `USER_NAME` varchar(255) DEFAULT NULL COMMENT '用户名', `AGE` int(5) DEFAULT NULL COMMENT '年龄', `COUNTRY` varchar(...
MySQL中,在整型字段查询字符串,返回了所有为0的结果,应该返回null或空。例如表结构信息:CREATETABLE`t`( `name`char(20)COLLATEutf8mb4_unicode_ciDEFAULTNULL, `id`int(11)NOTNULL )ENGINE=InnoDBDEFAULTCHARSET=utf8m...
数据库里面的字段为空的,用类对象取出来的候,类的对应的变量会变成该类型的默认值。int类型是0,double是0.0,string为null。总之,这些成员变量会被自动赋上默认值,而不会报空指针的错误。 用程序测试,环境为SSM: 程序运行结果:
MySQL查询数据,若给 int 类型字段price传值为'',最后price=0的记录都将会被查出来。 原因:传给int类型的参数,如果是字符串,并且该字符串全是数字组成,这里mysql会把这个字符串转为数字。例如,传入值'678',最后转换结果为数字678,实际查询用的参数就是数字678。 如果传的参数是字符串,但不是全由数字组成,这里mysql会把这个字符串转为数字0。例如,传入值'a...
最近遇到查询问题,筛选查出的数据不对,追踪到sql语句,发现有个条件传了空字符,该字段在表中的类型是int, 即是:select *fromxxxwheretype=‘’;其中type类型为int,表面上看应该是查不到数据才对,发现查到的数据是type=0的数据。 说明当类型为int空字符查询条件会变成0,变成select *fromxxxwheretype=0;
会发生这种情况,一定是字段为int或者float类型,它会把空字符串默认为0,varchar则会还是空字符串 解决办法一般为两个:第一个把所有空字符串替换为\N,但这种不现实也很难实现 推荐第二个: load data infile 'F:/factor_db/barra_test' into table t_stock_factor_barra fields terminated by '\t' lines terminated by '\r\n' ignore 1 lines (`full_in
MySQL中内置了一些函数,可以将字段转换为数字类型。在MySQL中,数字类型通常指整型、浮点型等类型。 1. CAST函数:CAST函数可以将表中的数据类型转换为其他类型。例如,将字符串类型转换为数字类型。语法如下: CAST(expression AS type) 其中,expression是待转换的表达式,type是目标数据类型。 SELECT CAST('10' AS UNSIGNED); -- 输出结果为10,将字符串'10'转换为无符号整型 2. CONVERT函数:CONVERT函数也可以用于在MySQL中将一个数据类型转换为另一个数据类型。语法如下: CONVERT(expression, type) 其中,expression是待转换的表达式,type是目标数据类型。 SELECT CONVERT('10', SIGNED); -- 输出结果为10,将字符串'10'转换为有符号整型 3. ABS函数:ABS函数可以将字段的值转换为其绝对值。如果该字段是数字类型,则此函数没有任何影响;如果该字段字符串类型,则将其转换为数字类型,再取其绝对值。语法如下: ABS(expression) 其中,expression是待转换的表达式。 SELECT ABS('-10'); -- 输出结果为10,将字符串'-10'转换为有符号整型,再取其绝对值 4. ROUND函数:ROUND函数可以将字段的值四舍五入到指定的小数位数。如果该字段字符串类型,则先将其转换为数字类型,再进行四舍五入。语法如下: ROUND(expression, decimals) 其中,expression是待转换的表达式,decimals是小数位数。 SELECT ROUND('3.14159', 3); -- 输出结果为3.142,将字符串'3.14159'转换为浮点型,保留3位小数并四舍五入。 综上所述,MySQL中常用的字段转数字类型的函数有CAST、CONVERT、ABS和ROUND等函数。需要根据实际应用场景进行选择和使用。在使用这些函数,需注意被转换的表达式类型及其结果类型,同还要注意小数位数、精度等问题。
我测试这个方法不行,需要如下配置: #security.provider.2=sun.security.rsa.SunRsaSign security.provider.2=net.tobszarny.ssl.java6.provider.BouncyCastleSSLProvider security.provider.10=org.bouncycastle.jce.provider.BouncyCastleProvider java与Sql Server建立连接异常Could not generate DH keypair及Unsupported curveId: 29 hfdcyj: 我测试这个方法不行,security.provider.2=net.tobszarny.ssl.java6.provider.BouncyCastleSSLProvider django1.11 启动错误:Generator expression must be parenthesized RyanLN: 升级django亲测有效