朋友导数据的时候卡住了,价格字段存的是文本,排序出来100元排在20元前面,他要转数字再排,一搜搜到CONVERT和CAST两个写法,完全分不清。
CONVERT和CAST几乎是一个东西
MySQL里它俩干的是同一件事,转类型。CAST是标准SQL写法,CONVERT是MySQL自己风格,多了个USING字符集选项。转数字排序,两个都能用。
SELECT price FROM goods ORDER BY CONVERT(price, DECIMAL(10,2));SELECT CAST(price AS DECIMAL(10,2)) FROM goods;注意写法顺序,CONVERT是先值后类型,中间逗号分隔,CAST是值在前、AS在后。新手最容易把CONVERT写成函数嵌套括号,报1064语法错。
转字符集得用USING,不是逗号
处理乱码时要转字符集,CONVERT才有这个本事,CAST没有。写法是CONVERT(字段 USING utf8mb4),把USING理解成按哪套字典重读一遍。
SELECT CONVERT(name USING utf8mb4) FROM users;很多人直接UPDATE全表转字符集,线上大表直接锁死。安全的路子是先SELECT验证一小批,没问题再分批改。
转换失败时它会给你什么
- 转数字:文本带货币符号先REPLACE清掉,否则转出来是0
- 转日期:格式不对直接NULL,最好再补一句IS NULL检查
- 转字符:CHAR(n)会截断,金额和长文本别贪方便用它
避坑办法很土:先跑一条带CONVERT的SELECT看结果,对了再套进业务SQL,别一上来就UPDATE。
一句话取舍:转类型用哪个顺手都行,转字符集只能CONVERT,大表操作一律先查后改。