在Windows WSL2下Ubuntu中的MariaDB中执行INSERT INTO ...操作会导致某些列的数据损坏

uqdfh47h  于 2022-11-08  发布在  Windows
关注(0)|答案(1)|浏览(114)

我正在将MariaDB数据库迁移到Linux Docker容器中。
我正在使用mariadb:最新的Ubuntu 20 LTS通过Windows 10 WSL 2通过VSCode远程WSL。
我已经将sql转储复制到容器中,并将其导入到具有DEFAULT CHARACTER SET utf8的InnoDB数据库中。它没有报告任何错误:

> 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;\"> ...');

如果I source是所述表的12个记录的子集,则所有列都被正确填充。
如果我source同一个表(4700行)的完整数据集,其中其他内容都相同,许多opDetails长文本字段的长度显示在sqlYog中,但没有数据可见。如果我在该列上运行SELECT,没有错误,但一些opDetails字段为“空”(即:您看不到任何数据),而且当我序列化该字段时,某些记录(不是全部)opDetails列

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

(以及更多功能\u0000)。
opDetails字段包含HTML片段。我猜它与该内容有关,可能与CHARSET有关,但这并不能解释为什么只有在导入大量行时才会出现错误。通过一组12行导入的同一行可以正常工作。
同样的测试,在一个Windows盒子上的全套数据与MariaDB运行在该主机上(即没有Ubuntu或WSL等)都完美地工作。
我尝试将表的字符集设置为utf8以匹配数据库默认值,但没有效果。我假设这是某种Windows WSL问题,但我正在Ubuntu主机内的容器上运行source命令。
MariaDB数据文件夹使用卷进行Map,同样都在Ubuntu容器中:

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

有没有人能提供任何建议,而我通过,并尝试手动删除内容,直到它的工作?我真的在黑暗中这里。

**编辑:**我刚刚在Mac上运行了相同的导入过程,导入到OSX主机上的MariaDB容器中,以检查它是否 * 实际上 * 与Windows WSL等相关,OSX数据库是否存在相同的问题。所以,可能是MariaDB Docker问题?
**EDIT 2:**看起来它与opDetails的实际内容无关。对于显示症状的给定行,数据是否正确导入似乎取决于我导入的行数!对于少量行,一切正常。对于大量行,会缺少数据,但总是相同的行和opDetails字段。我将尝试以小块导入,但总的来说表并不那么大!
**编辑3:**我尝试了一个没有卷的docker-compose,并将数据直接导入到MariaDB容器中。同样的问题。我想知道这是文件系统不兼容还是某种速度问题。是的,抓住救命稻草!

谢谢你,默里

06odsfpq

06odsfpq1#

好的。我让它工作了。:-)
我忽略了一个信息,它可能是无关紧要的,无论如何,是我从一个sql转储从10.1.48-MariaDB-0ubuntu0.18.04.1导入,因为我正在迁移一个遗留应用程序。
所以,用我的docker-compose:
| 版本号|测试结果|
| - -|- -|
| mysql:最新的|数据已正确导入|
| mariadb:最新的|由于此问题而失败|
| 乐器名称:乐器名称:10.7.4|由于此问题而失败|
| 玛丽亚b:玛丽亚b:10.7|由于此问题而失败|
| 马里亚德布:10.6|数据已正确导入|
| 马里亚德布:10.5|数据已正确导入|
| mariadb :10.2|数据已正确导入|
重要提示:请记住在两次测试之间完全删除外部卷装载文件夹内容!
所以,现在我不确定这个问题是我需要注意的某种sql不兼容,还是v10.6和10.7之间引入的bug,所以我没有记录bug报告。如果其他更专业的人认为这是bug,我很乐意报告。
现在我很高兴使用10.6,这样我就可以进行迁移-最后期限即将到来!
所以,这算是“解决”了。
谢谢你所有的帮助。如果我发现任何进一步的东西,我会张贴回这里。默里

相关问题