【问题标题】:Bad encoding import SQL file into MySQL错误编码将 SQL 文件导入 MySQL
【发布时间】:2023-12-29 23:47:01
【问题描述】:

我想导入一个编码为 Latin1 的 SQL 文件。我想保留这个文件编码。 sql文件中的数据被很好地编码为Latin1。

我执行了这个命令:

mysql -hlocalhost -uroot -p Database --default-character-set=latin1 < file.sql

但是数据被编码成 utf8 编码到数据库中。我不明白为什么要转换数据。我应该获得“é”(Latin1)并获得“é”(utf8)。

我创建了我的数据库:

CREATE DATABASE Database CHARACTER SET latin1 COLLATE latin1_swedish_ci;

您能帮帮我吗,我如何导入我的 SQL 文件以保持编码?

【问题讨论】:

    标签: mysql sql encoding utf-8 converter


    【解决方案1】:

    数据库字符集可能会被表字符集覆盖。表字符集可能会被列字符集覆盖。请提供SHOW CREATE TABLE

    file.sql 中的字节是什么编码?如果 character é 占用一个 byte(十六进制 E9),则它被编码为 latin1。如果需要两个字节(十六进制C3A9),那么它就是utf8。如果C3A9解释为 latin, it comes out asé`。这称为 Mojibake。

    通过说--default-character-set=latin1,您宣布源中的字节被编码为latin1。

    即使源字节是latin1(例如十六进制96),表中的列也可以是CHARACTER SET utf8。执行插入时,编码将被转换(转换为 C3A9)。

    【讨论】:

      【解决方案2】:
      mysql -u your-username -p your-password --database your-db --default-character-set utf8mb4 < my_data.sql
      

      工作。

      编码仍然是人间地狱,不明白为什么 MySql/Maria 仍然没有默认为 UTF-8 甚至忽略文件的导入格式。

      【讨论】:

      • MySQL 8.0 默认为 utf8mb4。这导致该论坛中字符集问题的显着下降。不幸的是,在 MySQL 之外仍有其他编码的数据集。