【问题标题】:MYSQL: West European Characters get Mangled using LOAD DATA LOCAL INFILEMYSQL:西欧字符使用 LOAD DATA LOCAL INFILE 被破坏
【发布时间】:2015-05-08 18:24:44
【问题描述】:

当我在 MySQL 命令行上运行它时,它工作正常:

INSERT INTO MYTABLE VALUES(NULL,101942,'2015-05-08','sähkötupakalle');

'ä' 和 'ö' 最终出现在 MySQL varchar 列中就好了。

但是,当我将相同的数据放在一个文件中,并使用

LOAD DATA LOCAL INFILE

然后 'ä' 和 'ö' 被破坏,我最终在 MySQL varchar 列中得到如下所示的数据:

sähkötupakalle

关于如何使用“LOAD DATA LOCAL INFILE”正确加载这些字符的任何想法?仅供参考,我的表有 CHARSET=utf8。

【问题讨论】:

    标签: mysql character-encoding


    【解决方案1】:

    您正在加载的文件显然是用 utf8 正确编码的吗?但是你没有包含CHARACTER SET utf8 子句?

    “Mojibake”的症状: 当SELECTing 文本时,每个非英文字符被替换为 2-3 个字符,您可以称之为 jibberish 或垃圾。

    你是如何陷入困境的:

    • 将INSERTed 写入表中的客户端字节被编码为utf8(良好),并且
    • 连接的字符集是latin1(例如,通过SET NAMES latin1),并且
    • 表列被声明为CHARACTER SET latin1

    如何修复文本和表格:

    做两步ALTER:

    ALTER TABLE Tbl MODIFY COLUMN col VARBINARY(...) ...;
    ALTER TABLE Tbl MODIFY COLUMN col VARCHAR(...) ... CHARACTER SET utf8 ...;
    

    长度足够大并且其他“...”具有其他任何内容(NOT NULL 等)已经在列上。

    这会转换列定义,同时保留位。

    如何修复代码(一般):

    • 将客户端的 charset 声明更改为 utf8 - 通过 SET NAMES utf8 或等效项。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-10-05
      • 2012-06-01
      • 2020-07-25
      • 1970-01-01
      • 2013-01-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多