我使用SSMA for MySQL从MySQL迁移到MSSQL,在几个表上我得到了22018错误。经过大量的捣乱后,我发现由于俄语字符存储在这些表格中而产生错误。
例如:Бухгалтерский учет
表格中还有其他非英文字符,例如Profissão Jurídica
,并且它们正常运行。
错误与排序规则有关,MySQL表上的排序规则为latin1_swedish_ci
,并且包含"外来"的列。字符上有utf8_unicode_ci
个排序规则,且为varchar(255)
。
MSSQL中的收件人表使用数据库默认排序规则(Latin1_General_CI_AS
),收件人列为nvarchar(255)
。
在SSMA中,latin1
的字符集映射设置为默认值CHAR/VARCHAR
,我尝试将此设置为NCHAR/NVARCHAR
但没有成功。所有实例的varchar
的类型映射都设置为nvarchar
。
我找到的唯一接近答案的是this posting。除非我忽略了答案的要点,否则我无法看到转换缺失 - 或者是否存在?
答案 0 :(得分:30)
在花了几个小时试图找出它为什么不起作用之后我找到了解决方案,当我开始放弃并在Access中使用链接表时,传递给MSSQL的传递查询。
我使用的是错误的ODBC驱动程序。事实证明,有2个MySQL ODBC驱动程序安装了ANSI
和Unicode
驱动程序。我正在使用ANSI
。当我把它换成Unicode
时一切都很好!
答案 1 :(得分:1)
根据Microsoft SSMA帮助指南,SSMA仅与MySQL ODBC 5.1驱动程序(可信任)兼容。
我将MYSQL ODBC从5.3降级到5.1,它确实有效。
MYSQL ODBC 5.1~链接 https://dev.mysql.com/downloads/file/?id=415029