MYSQL:西欧字符使用LOAD DATA LOCAL INFILE进行Mangled

时间:2015-05-08 18:24:45

标签: mysql character-encoding

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

if (window.addEventListener) {
  window.addEventListener('DOMContentLoaded', openNews(0));
} else {
  window.attachEvent('onload', openNews(0));
}

'ä'和'ö'最终在MySQL varchar列中结束。

但是,当我在文件中放入相同的数据时,使用

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

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

LOAD DATA LOCAL INFILE

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

1 个答案:

答案 0 :(得分:1)

显然你加载的文件是用utf8正确编码的?但是你没有包含CHARACTER SET utf8条款?

" Mojibake" 的症状 当SELECTing文本时,每个非英文字符被2-3个字符替换,您可以将其称为乱码或垃圾。

你是如何陷入困境的:

  • 表中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或同等身份。