提问人:Lehren 提问时间:5/8/2023 更新时间:5/8/2023 访问量:22
更新具有不同列长度的表并将文本与整数进行比较时,MYSQL 行为不一致
Inconsistent MYSQL behaviour when updating table with different column lengths and comparing text to integer
问:
如果我有一张桌子,比如
create table test
(
id varchar(255) not null
primary key,
price varchar(10) not null,
link varchar(255) not null
);
它有这样的数据:
编号 | 价格 | 链接 |
---|---|---|
1 | 50 | 发短信 |
2 | 50 | 发短信 |
3 | 50美元 | 发短信 |
我运行一个查询,比如update test set link = 'a' where price <= 50;
MySQL给我一个错误[22001][1292] Data truncation: Truncated incorrect DOUBLE value: '50 USD'
但是,如果我突然更改了列长度,则查询不会引发错误,并且(某种程度上)可以更新所有列,包括其中的列。这很奇怪。price
varchar(255)
price
50 USD
为什么?这是一个设置吗?这是mysql中的故障吗?列长度的截止值,当它出错时,当它不出错时,它似乎是完全任意的,并且在不同的数据库中是不同的
答:
0赞
SelVazi
5/8/2023
#1
这是一种仅使用REGEXP_SUBSTR
update test set link = 'a' where REGEXP_SUBSTR(price,"[0-9]+") <= 50;
评论
0赞
Lehren
5/8/2023
不过,我不想提取数字。它应该适用于仅包含数字的列。这还包括“50.00”和“50,00”等双打。
0赞
SelVazi
5/8/2023
使用作品..您使用的是哪个mysql版本?REGEXP_SUBSTR
0赞
Lehren
5/8/2023
啊,你编辑了你的评论,我只尝试了未签名的选角。但是请参阅我更新的评论,我的问题不是专门关于如何解决这个问题,而是为什么 mysql 根据列长度给出不一致的结果。
0赞
SelVazi
5/8/2023
我补充了两个建议:)当我测试时,我发现只有带有REGEXP_SUBSTR的解决方案有效
评论
<= '50'