【问题标题】:Issue with mysql import file .sql in local, due to the language encoding由于语言编码,本地 mysql 导入文件 .sql 出现问题
【发布时间】:2018-02-09 11:31:52
【问题描述】:

当我从服务器导入一个 sql 文件时,我得到了奇怪的字符。我想相信它是编码。我正在写服务器 bd 和本地 bd 的值:

服务器:

collation_connection: utf8mb4_general_ci
collation_database: utf8_spanish_ci
collation_server: utf8_general_ci

character_set_client: utf8mb4
character_set_connection: utf8mb4
character_set_database: utf8
character_set_filesystem: binary
character_set_results: utf8mb4
character_set_server: utf8
character_set_system: utf8
character_sets_dir: C:\Program Files\MySQL\MySQL Server 5.7\share\charsets\

本地

collation_connection: utf8mb4_general_ci
collation_database: latin1_swedish_ci
collation_server: latin1_swedish_ci

character_set_client: utf8mb4
character_set_connection: utf8mb4
character_set_database: latin1
character_set_filesystem: binary
character_set_results: utf8mb4
character_set_server: latin1
character_set_system: utf8
character_sets_dir: C:\xampp\mysql\share\charsets\

文件 SQL 导入包含此脚本:

CREATE DATABASE IF NOT EXISTS `prueba` /*!40100 DEFAULT CHARACTER SET utf8 COLLATE utf8_spanish_ci */;
USE `prueba`;
CREATE TABLE IF NOT EXISTS `pruebaTable` (
`co_pruebaTable` bigint(20) NOT NULL AUTO_INCREMENT,
`name` varchar(100) COLLATE utf8_spanish_ci NOT NULL
PRIMARY KEY (`co_pruebaTable`)
) ENGINE=InnoDB AUTO_INCREMENT=418630 DEFAULT CHARSET=utf8 
COLLATE=utf8_spanish_ci;

当我在本地导入数据库时​​,“pruebaTable”中的“name”列包含稀有字符,但在服务器数据库中我正确地看到了这些数据

我已尝试使用此查询更改此变量,但它不起作用:

set collation_database=utf8_spanish_ci;

有什么解决办法?导入此文件 sql.xml 时,我需要正确查看此数据。我用记事本++打开这个文件,我可以正确地看到数据。编码.sql是:UTF-8,所以问题应该是编码到本地数据库,我认为

谢谢

【问题讨论】:

    标签: mysql encoding character-encoding localhost


    【解决方案1】:

    列定义覆盖表定义,表定义覆盖数据库定义。列定义不是问题。

    你是如何进行“导入”的?如果是LOAD DATA,则使用其中为负载建立CHARACTER SET 的子句。

    连接时是否建立字符集?你用SET NAMES utf8;吗?还有什么?

    参见Trouble with UTF-8 characters; what I see is not what I stored中的“Mojibake”

    让我们从另一边调试一下……你得到了什么“奇怪的字符”?奇怪的文字SELECT HEX(name) ...的结果是什么?

    F1 C3B1 ñ 在 latin1, hexC3B1when correctly encoded in utf8 (or utf8mb4), or hexC383C2B1when it shows asñ` 为“双重编码”编码时是十六进制的 F1

    【讨论】:

      【解决方案2】:

      尝试更改您的数据库:

      ALTER DATABASE prueba CHARACTER SET utf8 COLLATE utf8_spanish_ci;

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-02-25
        • 1970-01-01
        • 1970-01-01
        • 2016-04-10
        • 2019-05-14
        • 1970-01-01
        • 2010-10-09
        • 1970-01-01
        相关资源
        最近更新 更多