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