【发布时间】:2026-01-26 07:26:07
【问题描述】:
我不认为标题可以更好地描述为 tl;dr,因为问题有点深。
我有两个数据库(芬兰语):
MSSQL(排序规则:SQL_Latin1_General_CP437_CI_AI)
MySQL(排序规则:utf_general_ci)
我在vs2017中创建了BI项目,连接了两个数据库并将表从一个转移到另一个,没问题。除了 1 个字母:“å” - 而是“?”。我无法更改任何数据库排序规则,因此我正在尝试找到一种方法来使用这封信传输单词。
我尝试过的:
- 旧数据库源 -> ODBC 目标
- 点“1”和中间的“数据转换”块(代码页 1252)
-
脚本组件,我尝试过:
-
用“_latin”插入
sql= "INSERT INTO db.words(Name) VALUES(_latin1'å')"; byte[] b = Encoding.UTF8.GetBytes(sql); odbcCmd = new OdbcCommand(Encoding.UTF8.GetString(b), odbcConn); odbcCmd.ExecuteNonQuery(); -
不带它插入
sql= "INSERT INTO db.words(Name) VALUES('å')"; byte[] b = Encoding.UTF8.GetBytes(sql); odbcCmd = new OdbcCommand(Encoding.UTF8.GetString(b), odbcConn); odbcCmd.ExecuteNonQuery(); -
不同的编码方式
byte[] bytes = Encoding.GetEncoding(1252).GetBytes("å"); var myString = Encoding.GetEncoding(1252).GetString(bytes); byte[] bytes2 = Encoding.Default.GetBytes("å"); var myString2 = Encoding.Default.GetString(bytes2); -
使用 COLLATE 插入导致我出错
insert into db.words(Name) values ("å" COLLATE latin1_swedish_ci) ;
-
和错误:
System.Data.Odbc.OdbcException:“错误 [HY000] [MySQL][ODBC 5.3(a) 驱动程序][mysqld-5.7.21-log]COLLATION 'latin1_swedish_ci' 对 CHARACTER SET 'cp1250' 无效”
这是有趣的部分:
我可以在 MySQL Workbench 中毫无问题地使用这个字母进行插入,它会被插入,但是当我尝试将它从一个数据库传递到另一个数据库时,它会丢失。我已经在数据转换之间设置了数据查看器,并且字母仍然存在,并且在调试脚本时,它是在插入数据库的字符串编码之后。
也许有人知道我还能尝试什么,因为我觉得我已经尝试了一切,并且觉得这个问题的解决非常接近,但我只是看不到它。
【问题讨论】:
标签: mysql sql-server ssis odbc collation