我正在使用OdbcDataReader
. 当我查看表中的数据时,它的格式为2013-09-12 11:11:09
. 但读者似乎以格式阅读它12/09/2013 11:11:09
。
然后我尝试将其插入另一个 mysql 表但收到错误:
日期时间值不正确:第 1 行的列 'timestamp' 的 '12/09/2013 11:11:09'
如何解决这种格式差异?我应该以某种方式引用一些 Unix 时间戳值吗?
数据不应以任何文本格式出现在表格中。这只是一个日期和时间。
当您将数据转换为字符串时,您会看到格式 - 您应该尽可能少地这样做。特别是,当您将数据插入到不同的表中时,您根本不应该使用格式化值 - 您应该使用DateTime
参数化 SQL。
基本上,除非您真的需要数据的字符串表示形式,否则您应该将其保留为“本机”表示形式(DateTime
在本例中)。每次转换文本或从文本转换时,这都是失败的机会。日期和时间对于时区等来说已经足够困难了,而不会涉及到无关的转换。
您如何看待“表中”的数据?我不熟悉 MySQL 的实现,但 Oracle 和 Sql Server 的日期时间值以不可读的二进制格式存储,并由查询工具转换为可读的时间戳。MySQL 可能正在做类似的事情。
尝试将其插入另一个mysql表
如果您在插入数据时关心格式,那么您正在做一些非常糟糕的事情。这强烈表明您正在使用一种容易受到 sql 注入攻击的技术,而不是参数化查询。如果使用参数化查询,则直接将 C# datetime 类型分配给查询参数值,并且 ADO.Net 对象会处理您需要的任何格式。那时,您可以成功DateTime.Parse()
或DateTime.TryParse()
成为查询的有效输入的任何内容。