我正在尝试使用 MySQL Workbench 迁移向导将几个表从 SQL Server 迁移到 MySQL。对于结构迁移,一切正常,但是当我转到数据迁移部分时,它会为一个表引发错误:
错误:
dbo
。Documents
:SQLExecDirect(SELECT [DocumentID], [CategoryID], CAST([DocumentName] as NVARCHAR(255)) as [DocumentName], [Active], [NavigatorID], CAST([DocumentText] as NTEXT) as [DocumentText], [ UseSubtitle], CAST([DocumentSubtitle] as NVARCHAR(255)) as [DocumentSubtitle], CAST([DocumentPlainText] as NTEXT) as [DocumentPlainText], [DocumentType], CAST([DocumentLink] as NVARCHAR(255)) as [DocumentLink ], [Sitemap], CAST([SubtitleImage] as NVARCHAR(255)) as [SubtitleImage], CAST([MetaTags] as NVARCHAR(8000)) as [MetaTags], CAST([MetaDescription] as NVARCHAR(8000)) as [MetaDescription], [AccessLevel] FROM [ctool_test].[dbo].[Documents]): 42000:1131:[Microsoft][ODBC SQL Server Driver][SQL Server]给转换规范 'nvarchar 的大小 (8000) ' 超过任何数据类型所允许的最大值 (4000)。2131:[Microsoft][ODBC SQL Server Driver][SQL Server]给转换规范“nvarchar”的大小 (8000) 超过了任何数据类型允许的最大值 (4000)。
基于此,我可以理解,nvarchar
当 MySQL 可以处理 65535 时,它将数据列限制为 4000 的最大大小。
任何线索我怎样才能让它工作?
谢谢
好吧,既然你有数据当前存储在 SQL Server 中,并且它已经在一个
NVARCHAR
列中,那么它要么是一个NVARCHAR <= 4000
(在这种情况下你不能丢失任何数据,并且应该将所有实例更改NVARCHAR(8000)
为NVARCHAR(4000)
),或者它是一个NVARCHAR(MAX)
列,在这种情况下,您将所有实例更改为NVARCHAR(8000)
toNVARCHAR(MAX)
。或者只是忽略那些CASTs
——你真的需要它们吗?顺便说一句,您可能也应该更改
as NTEXT
为as NVARCHAR(MAX)
。