2013-01-22 31 views
1

我正在将一个小型数据库从MySQL传输到MSSQL。MySQL到MSSQL数据类型传输

当前MySQL的声明例子: *(键和NOT NULL有意跳过)

CREATE TABLE my_table(
    `id` bigint(20), 
    `version` int(10), 
    `user_id` tinyint(3) unsigned, /*less then 100*/ 
    `date_crated` int(11), /*unix time like 1334736752 */ 
    `image_content` blob, 
    `xml_content` longtext /*xml with non english texts, 5000+ character*/ 
) 

而且我MSSQL的变体:

CREATE TABLE [my_table](
    [id] bigint, 
    [version] int, 
    [user_id] tinyint, 
    [date_crated] int, 
    [image_content] varbinary(MAX), 
    [xml_content] nvarchar(MAX) 
) 

我不是信心的最后三个.. 。
是否有任何潜在的数据丢失?

+0

为什么使用整数而不是时间类型来存储日期? – eggyal

+0

@eggyal日期存储为本地化支持的unix时间, 您可以举个'临时类型'的例子,为什么它更好? –

+3

不是*临时*类型; *时间*类型(如与时间有关)。例如'TIMESTAMP',将数据存储为“* unix time *”,但MySQL会意识到该值的含义 - 因此它会自动调整会话['time_zone']的输入/输出(http://dev.mysql .COM/DOC/EN /服务器系统variables.html#sysvar_time_zone)。 – eggyal

回答

1

我看不错,除了date_createdversion:我会去biginttimestamp(64位,UNIX时间戳是从32位到64位扩大)--- MSSQL int是4字节(32位)。你也应该检查你是否需要64位整数version

+0

因此对于(可能是巨大的)实体上的ID列的'bigint'是要走的路吗? –

+0

那么这取决于MySQL中存储在ID中的数据---我们只能根据你提供的MySQL模式进行推测。 – muehlbau