programing

SQL Server에서 latin1 varchar의 문자를 MariaDButf8에 삽입하려면 어떻게 인코딩해야 합니까?

bestprogram 2023. 10. 24. 21:27

SQL Server에서 latin1 varchar의 문자를 MariaDButf8에 삽입하려면 어떻게 인코딩해야 합니까?

현재 저는 이전 SQL Server DB에서 SQLCMD로 추출을 수행하고 있습니다. 여기서 varchar 열은latin1INSERT 문을 파일에 생성하여 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;

지금까지 제가 교체하는 것은'.

하지만 마리아에게서 이런 오류가 발생합니다.DB:

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

저는 여기서 mysql의 파일 로드에 대한 varchar 데이터 덤프에 대해 비슷한 질문을 했지만 mariadb는 아니지만 본질적으로 전체 솔루션을 얻지 못했기 때문에 이번에는 이를 인코딩하는 방법과 호환되지 않는 문자에 대해 더 집중적으로 질문합니다.

이전 질문에 대한 누군가가 "\x87은 라틴어 1에서 잠재적으로 문자 ‡입니다."라고 말했습니다.

또한 덤프 파일에서 특수 문자를 찾을 수 없습니다. \x87ao 또는 ‡ 조합으로 검색할 수 없습니다.

적어도 357개의 utf8개의 문자가 끝납니다.87. 그 중 몇 가지는 다음과 같습니다.

| Ç               | 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, 아마 찾을 수 있을 겁니다.

cp1252MariaDB에서 사용할 수 없습니다; 아마도 당신이 사용하고 있었을 것입니다.latin1, 어떤 것이 '동일한' 것입니까?어떤 버전을 사용하고 계십니까?

언급URL : https://stackoverflow.com/questions/50408010/how-do-i-encode-characters-from-latin1-varchar-in-sql-server-to-insert-into-mari