siss mssql到mysql具有不同的排序规则,没有复制芬兰语字母å

nwwlzxa7  于 2021-06-24  发布在  Mysql
关注(0)|答案(1)|浏览(492)

我不认为标题可以更好地描述为tl;博士,因为问题有点深。
我有两个数据库(芬兰语):
mssql(排序规则:sql\u latin1\u general\u cp437\u ci\u ai)
mysql(排序规则:utf\u general\u ci)
我在vs2017中创建了bi项目,连接了两个数据库并将表从一个数据库传输到另一个数据库,没有问题。除了一个字母:“å" - 而是“?”。我不能改变任何数据库排序规则,所以我试图找到一种方法来转移这个字母的话。
我试过的:
旧数据库源->odbc目标
点“1”,中间有“数据转换”块(代码页1252)
脚本组件,我在其中尝试过:
插入“\拉丁语”

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);

插入与校对,这让我的错误

insert into db.words(Name) values ("å" COLLATE latin1_swedish_ci) ;

和错误:
system.data.odbc.odbcexception:“error[hy000][mysql][odbc 5.3(a)driver][mysqld-5.7.21-log]排序规则“latin1_-swedish_ci”对字符集“cp1250”无效”
有趣的是:
我可以在mysql workbench中毫无问题地使用这个字母进行insert,它将被插入,但是当我尝试将它从一个数据库传递到另一个数据库时,它就丢失了。我在数据转换和字母仍然存在之间设置了数据查看器,并且在调试脚本时,它是在插入数据库的字符串编码之后设置的。
也许有人知道我还能尝试什么,因为我觉得我什么都试过了,觉得这个问题的解决非常接近,但我就是看不出来。

93ze6v8z

93ze6v8z1#

cp1250不包括 å ; cp437和utf8也包括在内。 COLLATE 它只适用于比较和排序。
不要使用任何编码/转换功能;相反,请指定数据的编码方式。
我看到了“代码”--但是在这种语言和/或编辑器中,源代码的编码是什么?
告诉我们任何有问题的字符串的十六进制。
你想转哪个方向?
每个数据库的连接参数是什么?

相关问题