SISS MSSQL для MySQL с другой сортировкой не копирует финскую букву

0

Я не думаю, что название можно было бы лучше описать как tl; dr, потому что проблема немного глубже.

У меня две базы данных (финский язык):

MSSQL (сопоставление: SQL_Latin1_General_CP437_CI_AI)

MySQL (сортировка: utf_general_ci)

Я создал проект BI в vs2017, подключил две базы данных и передал таблицы от одного к другому, без проблем. За исключением 1 буквы: "å" - вместо этого было "?". Я не могу изменить сортировку базы данных, поэтому я пытаюсь найти способ передать слова с этим письмом.

Что я пробовал:

  1. OLD DB Source → ODBC Destination
  2. Точка "1" с блоком "Преобразование данных" между (с кодовой страницей 1252)
  3. Компонент скрипта, в котором я попытался:

    • Вставить с помощью "_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 без проблем, и она будет вставлена, но когда я попытаюсь передать ее из одной базы данных в другую, она будет потеряна. Я установил Data Viewers между Data Conversion, и письмо все еще было там, а также при отладке скрипта оно было после кодирования в строке, которая была вставлена в базу данных.

Может быть, кто-то понял, что еще я могу попробовать, потому что чувствую, что я все пробовал, и чувствую, что решение этой проблемы действительно близко, но я просто этого не вижу.

Теги:
sql-server
ssis
odbc
collation

1 ответ

0
  • CP1250 не включает å; CP437 и utf8 включают его.
  • COLLATE имеет значения - применяется только для сравнения и сортировки.
  • Не используйте функции кодирования/преобразования; вместо этого укажите, как кодируются данные.
  • Я вижу "код" - но какова кодировка источника на этом языке и/или в редакторе?
  • Покажите нам гекс любых строк.
  • В каком направлении вы пытаетесь перевести?
  • Каковы параметры подключения для каждой базы данных?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню