You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

解决MySQL Workbench 8中更新查询无数据变更的问题

问题拆解与解决办法

为啥账号末尾会冒出来\r字符?

这事儿跟系统换行格式有关——Windows系统的换行是\r\n(回车+换行),而你写LOAD DATA的时候指定的行终止符是单独的\n。你从XLSX转出来的CSV用的是Windows格式的换行,所以导入时MySQL只去掉了\n,把每行末尾的\r给留在账号里了。平时查MySQL的时候看不到这个隐藏字符,但复制到记事本就显形了,这就是导致账号匹配不上的元凶。

两步解决:清掉\r+确保更新生效

有两种思路都能搞定,选哪个看你当前的操作阶段:

思路1:导入时直接把\r干掉(推荐)

修改你的LOAD DATA命令,让它适配Windows的换行格式,再加个额外的清理步骤双重保险:

LOAD DATA LOCAL INFILE "C:/testaccounts.csv" 
INTO TABLE tempfile 
FIELDS TERMINATED BY '	' ENCLOSED BY '"' 
LINES TERMINATED BY '\r\n'  -- 对应Windows的换行符
IGNORE 1 ROWS
(accounts)
SET accounts = TRIM(TRAILING '\r' FROM accounts);  -- 彻底清掉末尾的\r

思路2:已经导入了?那就事后修正

如果已经把数据导入临时表了,直接执行下面的更新语句,在加前缀0的同时把\r去掉:

UPDATE tempfile 
SET accounts = concat('0', TRIM(TRAILING '\r' FROM accounts)) 
WHERE accounts IS NOT NULL;

验证+最终更新

先确认临时表的账号干净了:

SELECT accounts, HEX(accounts) FROM tempfile;

HEX(accounts)的结果,如果没有0D(这是\r的十六进制编码),就说明没问题了。

然后再跑更新users表的语句:

UPDATE users 
SET status = 'A' 
WHERE account IN (SELECT accounts FROM tempfile);

这次就能精准匹配,成功更新状态啦。

内容的提问来源于stack exchange,提问作者Anjit Singha

火山引擎 最新活动