2012-03-15 119 views
-2

其实我只是试图插入字符串像这样的30/01/2012到一个表,其中该特定表列的类型为varchar。插入后,此值更改为0.008946322067594433。什么可能是这种行为的原因?请让我知道我在这里做错了什么。我在数据库/ SQL概念上很差。用斜线插入字符串到Mysql

+0

varchar列不应该在数据中看到任何更改。显示一些代码。 – 2012-03-15 18:43:23

+0

我怀疑这个变化是在**插入之前发生的**您是否在附上那个“?s?请告诉我们代码 – pcalcao 2012-03-15 18:44:56

+0

告诉我们您的代码伙计.. – 2012-03-15 18:47:04

回答

3

我怀疑你的SQL看起来像:

在这种情况下
INSERT INTO MYTABLE (X) VALUES (30/01/2012) 

它不是把它当作一个,而是一个表达来评价 - 这是被随后转换成字符串。如果是这种情况,这听起来像是在构建包含值的SQL字符串,例如,

String sql = "INSERT INTO ... VALUES (" + value + ")"; 

不这样做。使用PreparedStatement并改为设置参数值。它不但可以避免这个问题,还可以避免SQL注入攻击,日期和时间转换问题等。

(说到这个,假设这个值是一个日期,你为什么要存储它一个varchar列?如果你可能,使你的列代表你想要存储的数据更自然...)

编辑:我刚刚下载并安装MySQL来测试这...并确实在一个表与单个列(Name)这条SQL语句做错误的事情(在MySQL工作台):

INSERT INTO `test`.`sandbox` (`Name`) VALUES (30/01/2012); 

...但是这做正确的事:

INSERT INTO `test`.`sandbox` (`Name`) VALUES ('30/01/2012'); 

但你还是应该使用预准备语句的参数,当然。

+0

谢谢。我将在此处使用准备好的声明。 – Allwyn 2012-03-16 04:21:47