如何在 SQL Server 中对 latin1 varchar 中的字符进行编码以插入到 MariaDB utf8 中



目前,我使用SQLCMD从旧的SQL Server DB中提取数据,其中varchar列latin1,我将INSERT语句生成到文件中以将数据加载到MariaDB数据库中:

INSERT INTO maria_table (id, name, description) VALUES
(210,'ALL.M.USDBBL','Refining GOA All Monthly')
,(211,'S.M.USDBBL','RefinGdd 2 BBL'
,(212,'R.M.USDBBL','RefinGdd 2BL') 
, etc

使用 SQL Server 命令和选项:

SQLCMD.EXE -i "generate-inserts.sql" -h-1 -S "my-host" -d Tardis -r1 -W -b -f o:65001 > inserts.sql

还尝试了-u旗帜,但没有运气。

这是 SQL:

SELECT CONCAT('INSERT INTO maria_table (id, name, description)',
' VALUES ');
SELECT CONCAT(IIF(row_number() OVER (ORDER BY id ) = 1, ' ', ','),
'(',
id, ',',
'''', dbo.encode4MySql(name), ''',',
'''', dbo.encode4MySql(description), ''')'
)
FROM sql_srv_table WITH (NOLOCK)
ORDER BY id;
SELECT ';';
SELECT 'COMMIT;';

这是我需要开发的功能:

CREATE FUNCTION dbo.encode4MySql(@raw VARCHAR(4000))
RETURNS VARCHAR(4000) AS BEGIN
DECLARE @replaced VARCHAR(4000);
SET @replaced = REPLACE(@raw, '''', '''''');
??? what do I do here to replace those special characters?
RETURN @replaced;
END;

到目前为止,我正在替换的只是'.

但是我从MariaDB那里收到这样的错误:

ERROR 1366 (22007) at line 384: 
Incorrect string value: 'x87ao Su...' for column 'description' at row 1995

我在这里问了一个类似的问题 SQL Server 将 varchar 数据转储到 mysql 中的文件加载中,但不是 mariadb,但基本上没有得到完整的解决方案,所以这次我问的是关于如何编码和进一步不兼容字符的更集中的问题。

正如上一个问题中有人评论的那样,"\x87 可能是拉丁语 1 中的字符 ‡"。

我也无法在转储文件中找到特殊字符 - 使用 \x87ao 或 ‡ 的任意组合进行搜索都不起作用。

至少有 357 个以87结尾的 utf8 字符。 以下是其中的一些:

| Ç               | LATIN CAPITAL LETTER C WITH CEDILLA      |
| ć               | LATIN SMALL LETTER C WITH ACUTE          |
| Ň               | LATIN CAPITAL LETTER N WITH CARON        |
| Ƈ               | LATIN CAPITAL LETTER C WITH HOOK         |
| LJ               | LATIN CAPITAL LETTER LJ                  |
| ȇ               | LATIN SMALL LETTER E WITH INVERTED BREVE |
| ɇ               | LATIN SMALL LETTER E WITH STROKE         |
| ʇ               | LATIN SMALL LETTER TURNED T              |
| ˇ               | CARON                                    |
| ·               | GREEK ANO TELEIA                         |
| χ               | GREEK SMALL LETTER CHI                   |
| Ї               | CYRILLIC CAPITAL LETTER YI               |
| ч               | CYRILLIC SMALL LETTER CHE                |

搜索您的文件以查找ao Su,也许您可以找到它。

cp1252在MariaDB中不可用;也许您使用的是latin1,哪个是"相同"的? 您使用的是哪个版本?

最新更新