为了账号安全,请及时绑定邮箱和手机立即绑定

求大神帮帮忙

看图,想把tdb_goods表中的goods_name 字段中,结尾带2的数据都把2去掉,图中代码能执行,就是没改到数据(估计是-1那里没减到,要怎么写才行)

http://img1.sycdn.imooc.com//56a3385d0001853806410092.jpg


正在回答

3 回答

两个原因 :

1.LENGTH() 是以字节为单位计算字符串的长度,而SUBSTRING(str,pos,len)中的len参数是以字符为单位计算字符串长度。

2.在UTF-8中3字节=1个中文字符,GBK中2字节=1个中文字符

假设现在字段goods_name='联想lenovo2' ,

那么按字节计算的LENGTH(goods_name) = 13(utf-8编码),

字符计算的SUBSTRING(goods_name,1,9)='联想lenovo2'。

这个时候,如果题主想要去掉该字符串尾部的数字2,应该是...SET goods_name=SUBSTRING(goods_name,1,LENGTH(goods_name)-5)....(即len参数等于8,截取第1-第8位字符),而不仅仅只是LENGTH(goods_name)-1

0 回复 有任何疑惑可以回复我~
#1

lzp129 提问者

非常感谢!
2016-07-11 回复 有任何疑惑可以回复我~
#2

小月肖

长见识了
2016-07-13 回复 有任何疑惑可以回复我~

我想是因为你截取的字段中有汉字的原因。我做了一个实验,如下图所示,在判断长度的时候,一个汉字占2个字节,而在截取的时候,一个汉字占1个字节,那么如果有汉字,使用length()计算出来的长度要大于一个汉字按照一个字节得出来的长度,所以你截取的长度存在问题。因此你的语句执行结果才会显示2条数据符合语句,而更改的数据有0条,警告为0条。

http://img1.sycdn.imooc.com//56a397d10001f2da06690397.jpg

0 回复 有任何疑惑可以回复我~
#1

lzp129 提问者

我试过减更大的数值,也是没更改到,应该是减不到
2016-01-26 回复 有任何疑惑可以回复我~

我用你的语句是可以的,是不是你设定GOOD_NAME是VARCHAR格式的?

0 回复 有任何疑惑可以回复我~
#1

Lovey粒欧女士

难道不是设置成SMALLINT之类的格式吗?
2016-01-23 回复 有任何疑惑可以回复我~
#2

lzp129 提问者

是的,VARCHAR格式有什么问题吗
2016-01-26 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
与MySQL的零距离接触
  • 参与学习       396886    人
  • 解答问题       3353    个

本课程涵盖全部MySQL数据库的基础,学习MySQL数据库的基础知识

进入课程

求大神帮帮忙

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信