MYSQL:西欧字符使用 LOAD DATA LOCAL INFILE 被破坏
MYSQL: West European Characters get Mangled using LOAD DATA LOCAL INFILE
当我在 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" 正确加载这些字符有什么想法吗??仅供参考,我的 table 有 CHARSET=utf8.
显然您正在加载的文件是用 utf8 正确编码的?但是您没有包含 CHARACTER SET utf8
子句?
"Mojibake"的症状:
当 SELECTing
文本时,每个非英文字符被 2-3 个字符替换,您可以称之为乱码或垃圾。
你是怎么惹上麻烦的:
- 客户端的字节被
INSERTed
编码成table被编码为utf8(好),并且
- 连接的字符集是
latin1
(例如,通过SET NAMES latin1
),并且
- 已声明 table 列
CHARACTER SET latin1
如何修复文字和 table:
执行两步 ALTER
:
ALTER TABLE Tbl MODIFY COLUMN col VARBINARY(...) ...;
ALTER TABLE Tbl MODIFY COLUMN col VARCHAR(...) ... CHARACTER SET utf8 ...;
其中的长度足够大,而其他“...”的其他内容(NOT NULL
,等等)已经在列中了。
这会转换列定义,同时保留位。
如何修复代码(一般):
- 将客户端的字符集声明更改为
utf8
- 通过 SET NAMES utf8
或等效方法。
当我在 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" 正确加载这些字符有什么想法吗??仅供参考,我的 table 有 CHARSET=utf8.
显然您正在加载的文件是用 utf8 正确编码的?但是您没有包含 CHARACTER SET utf8
子句?
"Mojibake"的症状:
当 SELECTing
文本时,每个非英文字符被 2-3 个字符替换,您可以称之为乱码或垃圾。
你是怎么惹上麻烦的:
- 客户端的字节被
INSERTed
编码成table被编码为utf8(好),并且 - 连接的字符集是
latin1
(例如,通过SET NAMES latin1
),并且 - 已声明 table 列
CHARACTER SET latin1
如何修复文字和 table:
执行两步 ALTER
:
ALTER TABLE Tbl MODIFY COLUMN col VARBINARY(...) ...;
ALTER TABLE Tbl MODIFY COLUMN col VARCHAR(...) ... CHARACTER SET utf8 ...;
其中的长度足够大,而其他“...”的其他内容(NOT NULL
,等等)已经在列中了。
这会转换列定义,同时保留位。
如何修复代码(一般):
- 将客户端的字符集声明更改为
utf8
- 通过SET NAMES utf8
或等效方法。