从MySQL

时间:2019-02-07 23:38:44

标签: mysql

我遇到了很多不同的方法,这些方法可以从零填充列中检索整数值,有些方法看起来比其他方法花费更多。由于必须不时地从数据库中的零填充列中检索整数值,所以我想知道如何最好地检索它们。

在过去的几年中,我使用/看到过类似于以下内容的声明:

SET @zerofillExample = '000022';

SELECT CAST(@zerofillExample AS unsigned);
SELECT @zerofillExample+0;
SELECT @zerofillExample*1;
SELECT TRIM(LEADING '0' FROM @zerofillExample);

如果在铸造零填充柱的不同方式上没有性能差异,那么我是否不了解某些标准?

为清楚起见,更新:

  • 我知道如何从零填充列中选择整数值。
  • 检索整数值时,我正在寻找最有效的方法或标准
  • 将其强制转换为整数的某些原因:
    • 某些遗留表的键使用零填充,并且在PHP或JS中操作/处理数据时,'0000001'!==1。我很清楚,使用不同的列定义是不可以的,但这不是问题的重点。

1 个答案:

答案 0 :(得分:1)

简单的经验法则:普通表达式(示例中的全部4个)在查询性能中起着不重要的作用。

请注意,此外,确实需要 no 表达式:

mysql> SELECT '000022' + 1;
+--------------+
| '000022' + 1 |
+--------------+
|           23 |
+--------------+

也就是说,具有所有数字的字符串可以用作数字,而无需任何转换,甚至不能处理前导零。

您见过INT(6)吗?您知道(6)是什么意思吗?没事。

也就是说,除非您有INT(6) ZEROFILL。现在,如果您INSERT 22进入这样的列,然后显示它,您将得到000022仅为22显示的前导零。

当您说ZEROFILL时,您是在要求前导零。您无需执行任何操作即可获取数值。但是,如果您必须_display_it不带前导零,那么您就需要任何麻烦。我更喜欢第五名:

SELECT 0+@zerofillExample;

0+...是我在某些语言中看到的将字符串转换为数字的麻烦。尽管您实际上是从数字开始的,但这仍然使读者知道正在发生一些麻烦。

使用BENCHMARK()-

SELECT BENCHMARK(1e7, CAST(@zerofillExample AS unsigned));

大约在0.45秒后恢复一次(在我的笔记本电脑上)。同上其他3种情况。但是,我不相信这一点,因为@zerofillExample是一个字符串,而不是INT ZEROFILL