source

Windows WSL2에서 Ubuntu의 MariaDB에 있는 INSERT INTO ...에 삽입하면 일부 열의 데이터가 손상됩니다.

goodcode 2022. 9. 23. 00:13
반응형

Windows WSL2에서 Ubuntu의 MariaDB에 있는 INSERT INTO ...에 삽입하면 일부 열의 데이터가 손상됩니다.

MariaDB 데이터베이스를 Linux 도커 컨테이너로 마이그레이션합니다.

Windows 10 WSL2를 통한 Ubuntu 20 LTS에서 VSCode Remote WSL을 통해 mariadb:latest를 사용하고 있습니다.

the the 를 베꼈습니다.sql「DEFAULT CHARGER SET utf8」 「InnoDB」 「Import」.에러는 보고되지 않습니다.

> source /test.sql

이 파일은 다음과 같은 처리를 합니다(실제 데이터는 이 투고에 대해 잘립니다).

  USE `mydb`;
  DROP TABLE IF EXISTS `opsitemtest`;

  CREATE TABLE `opsitemtest` (
    `opId` int(11) NOT NULL AUTO_INCREMENT,
    `opKey` varchar(50) DEFAULT NULL,
    `opName` varchar(200) DEFAULT NULL,
    `opDetails` longtext,
    PRIMARY KEY (`opId`),
    KEY `token` (`opKey`)
  ) ENGINE=InnoDB AUTO_INCREMENT=4784 DEFAULT CHARSET=latin1;

  insert  into `opsitemtest`(`opId`,`opKey`,`opName`,`opDetails`) values
  (4773,'8vlte0755dj','VTools addin for MSAccess','<p>There is a super helpful ...'),
  (4774,'8vttlcr2fTA','BAS OLD QB','<ol>\n<li><a href=\"https://www.anz.com/inetbank/bankmain.asp\" ...'),
  (4783,'9c7id5rmxGK','STP - Single Touch Payrol','<h1>Gather data</h1>\n<ol style=\"list-style-type: decimal;\"> ...');

가 만약source해당 테이블의 12개 레코드 중 하위 집합이 모든 열을 올바르게 채웁니다.

가 만약source동일한 테이블의 전체 데이터 세트(4700 행)는 다른 모든 것이 동일하며, 많은 opDetails 긴 텍스트 필드의 길이는 sqlYog에 표시되지만 데이터는 표시되지 않습니다.해당 컬럼에서 SELECT를 실행하면 오류가 발생하지 않지만 opDetails 필드 중 일부는 "empt"(즉, 데이터를 볼 수 없음)가 됩니다.이 필드를 시리얼화하면 일부 레코드의 opDetails 컬럼(전부는 아님)에 오류가 없습니다.

"opDetails" : "\u0000\u0000\u0000\u0000\u0000\u0000\",

(및 기타 많은 \u0000).

opDetails 필드에는 HTML fragment가 포함되어 있습니다.이 콘텐츠와 CHARSET과 관련이 있을 것으로 추측됩니다.다만, Import 된 행이 많은 경우에만 에러가 표시되는 것은 설명되지 않습니다.12개의 행 세트를 통해 Import된 동일한 행이 올바르게 동작합니다.

그 호스트(Ubuntu 나 WSL 등)에서 실행되고 있는 MariaDB 를 사용하고 있는 Windows 박스상의 모든 데이터 세트에 대해서, 같은 테스트를 실시하면, 완전하게 동작합니다.

데이터베이스 기본값과 일치하도록 테이블 문자 집합을 utf8로 설정하려고 했지만 효과가 없었습니다. 의 만, Windows WSL 를 .sourceUbuntu 호스트 내의 모든 컨테이너에서 명령어를 실행합니다.

MariaDB 데이터 폴더는 볼륨을 사용하여 Ubuntu 컨테이너 내부에 매핑됩니다.

volumes:
      - ../flowt-docker-volumes/mariadb-data:/var/lib/mysql

이 과정을 거치고 작동할 때까지 수동으로 콘텐츠를 삭제해 보는 동안 누가 제안할 수 있습니까?난 정말 여기가 캄캄해.

편집: OSX 호스트의 MariaDB 컨테이너에 Mac에서 동일한 Import 프로세스를 실행하여 실제로 Windows WSL 등과 관련이 있는지 확인했는데 OSX 데이터베이스에 동일한 문제가 있는지 확인합니다.MariaDB 도커 문제일까요?

EDIT 2: opDetails의 실제 콘텐츠와는 관계가 없는 것 같습니다.증상이 나타나는 특정 행에 대해 데이터를 올바르게 가져올지 여부는 가져오는 행 수에 따라 달라집니다.적은 수의 행으로 모든 것이 양호합니다.큰 숫자의 경우 결측 데이터가 있지만 행과 opDetails 필드는 항상 동일합니다.조금씩 수입해 보겠지만 전체적으로 테이블이 그렇게 크지 않아요!

편집 3: 볼륨 없이 도커 컴포지트를 시도하여 데이터를 MariaDB 컨테이너로 직접 Import했습니다.같은 문제입니다.파일 시스템 호환성 문제인지 속도 문제인지 궁금합니다.네, 지푸라기 잡아요!

고마워, 머레이

네, 작동했습니다. :-)

제가 언급을 소홀히 했지만, 어쨌든 관련이 없을 수도 있는 정보 중 하나는 제가 sql 덤프에서 Import를 하고 있었다는 것입니다.10.1.48-MariaDB-0ubuntu0.18.04.1레거시 앱을 이행하고 있었기 때문입니다.

도커 구성:

버전 결과
mysql: 삭제 데이터 올바르게 Import
mariadb: 개요 이 문제에 따라 실패했습니다.
mariadb: adb: mariadb: 10.7.4 이 문제에 따라 실패했습니다.
mariadb: scarb: 10.7 이 문제에 따라 실패했습니다.
mariadb: 10.6 데이터 올바르게 Import
mariadb: 10.5 데이터 올바르게 Import
mariadb: 10.2 데이터 올바르게 Import

중요: 테스트 중에는 외부 볼륨 마운트 폴더 내용을 완전히 삭제해야 합니다.

따라서 이 문제가 SQL 비호환성인지 아니면 v10.6과 10.7 사이에 발생한 버그인지 알 수 없습니다.따라서 버그 리포트를 기록하지 않았습니다.만약 더 전문성을 가진 사람들이 이것이 버그라고 생각한다면, 저는 기꺼이 보고서를 만들겠습니다.

지금은 10.6을 사용하여 이행을 진행할 수 있습니다.마감이 다가오고 있습니다!

그래서, 이것은 일종의 "해결된" 것입니다.

그 동안 감사했습니다.더 이상 발견되면 여기에 다시 게시하겠습니다.머레이

언급URL : https://stackoverflow.com/questions/73045757/insert-into-in-mariadb-in-ubuntu-under-windows-wsl2-results-in-corrupted-dat

반응형