MySQL VARCHAR Type不会转换为Integer

时间:2014-12-01 21:33:03

标签: mysql sql sequelpro

我有一列VARCHAR类型的数据,我希望CONVERTCAST为整数(我的最终目标是将我的所有数据点都作为整数) 。但是,我尝试的所有查询都返回0的值。

我的数据如下:

1
2
3
4
5

如果我运行以下任一查询:

SELECT CONVERT(data, BINARY) FROM table
SELECT CONVERT(data, CHAR) FROM table

我的结果是:

1
2
3
4
5

那里没有惊喜。但是,如果我运行以下任一查询:

SELECT CONVERT(data, UNSIGNED) FROM table
SELECT CONVERT(data, SIGNED) FROM table

我的结果是:

0
0
0
0
0

我已经搜索了SO和谷歌来解决这个问题,没有运气,所以我想我会在这里尝试专业人士。

EDIT / UPDATE

我对评论中的建议进行了一些额外的查询,结果如下:

data LENGTH(data) LENGTH(TRIM(data)) ASCII(data)
1    3            3                  0
2    3            3                  0
3    3            3                  0
4    3            3                  0
5    3            3                  0

看来我的数据本身存在问题。对于遇到此帖子的任何人:此时我的解决方案是TRIM从数据点中过量,然后CONVERTUNSIGNED。感谢您的帮助!

进一步编辑/更新

经过一番研究后发现,我的数据中隐藏了NULL个字节。这个问题的答案有助于:How can I remove padded NULL bytes using SELECT in MySQL

4 个答案:

答案 0 :(得分:1)

SELECT data, LENGTH(data), LENGTH(TRIM(data)), ASCII(data) FROM table返回什么?您的数字字符串可能只是数字字符串。

或者,您使用的是多字节字符编码吗?

答案 1 :(得分:1)

我相信你的查询很好;因为它对我有用:sqlfiddle.com/#!2/a15ec4/1/3。

让我觉得你有数据问题。您确定某处的数据中没有返回或空格吗?

你可以通过尝试对数据执行长度或ascii来检查数据,看看你是否有超过预期的数据:

select ascii(data) from foo where ascii(data) not between 48 and 57

select length(data) as mLEN from table having mlen>1的长度。

答案 2 :(得分:0)

我相信这是正确的形式:

SELECT CAST(data AS UNSIGNED) FROM test;
SELECT CAST(data AS SIGNED) FROM test;

在这里测试:http://sqlfiddle.com/#!8/8c481/1

答案 3 :(得分:0)

试试这些语法

SELECT CONVERT(data, UNSIGNED INTEGER) FROM table

SELECT CAST(data AS UNSIGNED) FROM table