MySQL CAST()和CONVERT()的区别 | 您所在的位置:网站首页 › covert和overt的区别 › 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.还是有一点的咯硬要鸡蛋里挑骨头说区别的话,那就是以下两点吧: 语法不同: 功能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 标准不同。cast()是ANSI标准语法,convert()不是:这个怎么说呢,使用ANSI标准语法可以有更好的移植性,但是对于SQL的性能方面基本没有影响。一个常见的误区是很多人认为count(1)比count(*)效率高,其实不是。count(*)是ANSI标准语法而count(1)不是,而他们实现的功能以及性能是一致的,没有任何区别。 3.结语综上所述,在日常使用中,就不要再纠结用cast()还是convert()了,随便选一个就行,选不出来就丢硬币吧(不是)。 |
CopyRight 2018-2019 实验室设备网 版权所有 |