为什么MySQL数据库中的电话号码被截断

时间:2013-12-02 06:08:25

标签: mysql sql

我在mySQL中创建了一个数据库表,其中两个列名是“landPhone”和“mobilePhone”来存储电话号码(格式为:123-456-8000表示土地,098-765-6601表示移动电话) 。这两列的数据类型设置为VARCHAR(30)。数据已插入表中。但在SQL查询后,我发现电话号码已被截断。它显示(例如,上面两个数据)只有landPhone的前三个数字(123),并且在移除mobilePhone的前导'0'(98)后只显示前两个数字。

为什么会这样?

3 个答案:

答案 0 :(得分:8)

电话号码实际上不是号码;它们是碰巧包含数字的字符串(在您的情况下,是破折号)。如果您尝试将其解释为数字,通常会发生两件事:

  • 领先的零被遗忘。
  • 从第一个非数字到字符串末尾的所有内容都被删除。

这听起来与你描述的结果完全一样。即使你最终将结果填充到字符串字段中,也为时已晚 - 数据已经损坏。

确保您在此过程中的任何时候都不将电话号码视为整数。

答案 1 :(得分:6)

您必须使用

insert into sample values('123-456-8000', '098-765-6601' )

而不是

insert into sample values(123-456-8000, 098-765-6601 )

请参阅此SQLFiddle

答案 2 :(得分:0)

感谢大家的解决方案。正如cHao怀疑的那样,是我犯了错误。当我第一次创建表时,我将手机列的数据类型声明为INT,稍后我将它们更正为VARCHAR()。

当我删除表并将相同的数据插入新表时,它工作正常。

  

这听起来就像你描述的结果。即使你最终将结果填充到字符串字段中,也为时已晚 - 数据已经损坏。 ..cHao

要理解的问题:为什么mySQL不会覆盖以前的新数据类型?