我不认为标题可以更好地描述为tl; dr,因为问题更深一些。
我有两个数据库(芬兰语):
MSSQL(排序规则:SQL_Latin1_General_CP437_CI_AI)
MySQL(排序规则:utf_general_ci)
我在vs2017中创建了BI项目,连接了两个数据库并将表从一个转移到另一个,没问题。除了1个字母:“å” - 而不是“?”。我无法更改任何数据库排序规则,所以我试图找到一种方法来转发这封信。
我尝试了什么:
脚本组件,我尝试过:
插入“_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:“ERROR [HY000] [MySQL] [ODBC 5.3(a)驱动程序] [mysqld-5.7.21-log] COLLATION'latin1_swedish_ci'对CHARACTER SET'cp1250'无效”
这是有趣的部分:
我可以在MySQL Workbench中插入这个字母而没有问题,它会被插入,但是当我尝试将它从一个数据库传递到另一个数据库时,它就会丢失。我在数据转换之间设置了数据查看器,但字母仍然存在,并且在调试脚本时,它是在插入数据库的字符串中进行编码之后。
也许有人知道我还能尝试什么,因为我觉得我已经尝试了一切,并且觉得这个问题的决心非常接近,但我只是看不到它。
答案 0 :(得分:0)
å
; CP437和utf8确实包含它。COLLATE
无关紧要 - 它仅适用于比较和排序。