MySQL CAST()和CONVERT()的区别

MySQL CAST()和CONVERT()的区别

0.有区别吗

cast()convert()都是类型转换函数,可以将某个数据类型的值转换为另一种数据类型

其实在大部分情况下,这两个函数都是没有区别的。MySQL官方文档中对于cast()也提到:

This operation may also be expressed as CONVERT(expr, type), which is equivalent.

意思是:cast()的此操作(类型转换)可以被convert()替换,他们是等价的。

那么它们两个真的就没有区别吗?如果没有区别,为什么要设计两个功能一样的函数呢?带着这样的疑问,我认真地阅读了一下官方文档,对此总结如下:

他 们 真 的 没 有 区 别。

1.没有区别

没错,这就是事实。cast()能做的convert()也能做,反之亦然。有的文章说convert()支持编码转换,可是我cast()也支持啊:

CONVERT(string, CHAR[(N)] CHARACTER SET charset_name)
CAST(string AS CHAR[(N)] CHARACTER SET charset_name)

有的文章说,cast()可用于在CREATE TABLE ... SELECT语句中创建具有特定类型的列 ,可是我convert()也可以啊:

CREATE TABLE new_table1 SELECT CAST('2000-01-01' AS DATE) AS c1;
CREATE TABLE new_table2 SELECT CONVERT('2000-01-01', DATE) AS c1;

这两条语句创建的表结构是一模一样的。

从功能上说,cast()convert()就跟双胞胎一样,没有任何区别

2.还是有一点的咯

硬要鸡蛋里挑骨头说区别的话,那就是以下两点吧:

  1. 语法不同:
功能cast()convert()
类型转换cast(expr AS type)convert(expr, type)
编码转换cast(string AS CHAR[(N)] CHARACTER SET charset_name)convert(expr USING transcoding_name)

convert(string, CHAR[(N)] CHARACTER SET charset_name
  1. 标准不同cast()ANSI标准语法convert()不是:

这个怎么说呢,使用ANSI标准语法可以有更好的移植性,但是对于SQL的性能方面基本没有影响。一个常见的误区是很多人认为count(1)count(*)效率高,其实不是。count(*)是ANSI标准语法而count(1)不是,而他们实现的功能以及性能是一致的,没有任何区别

3.结语

综上所述,在日常使用中,就不要再纠结用cast()还是convert()了,随便选一个就行,选不出来就丢硬币吧(不是)。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值