【发布时间】:2010-11-29 06:37:57
【问题描述】:
我使用 LOAD DATA INFILE 将一些数据导入 MySQL 数据库。表本身和列都使用UTF8字符集,但是数据库的默认字符集是latin 1。因为数据库的默认字符类型是latin1,而且我使用LOAD DATA INFILE没有指定字符集,它解释文件为 latin1,即使文件中的数据是 UTF8。现在我的 UTF8 列中有一堆编码错误的数据。我发现this article 似乎解决了类似的问题,即“UTF8 插入 cp1251”,但我的问题是“Latin1 插入 UTF8”。我尝试在那里编辑查询以将 latin1 数据转换为 UTF8,但无法使其正常工作。数据要么是一样的,要么比以前更加混乱。例如,Québec 一词显示为 Québec。
[附加信息]
选择包裹在十六进制()中的数据时,québec有值5175c383c2a9626563。
这个表的创建表(简称)是。
CREATE TABLE MyDBName.`MyTableName`
(
`ID` INT NOT NULL AUTO_INCREMENT,
.......
`City` CHAR(32) NULL,
.......
`)) ENGINE InnoDB CHARACTER SET utf8;
【问题讨论】:
-
请发布相关表的 CREATE TABLE 语句以及一些损坏的行,但将损坏的列包含在 hex() 中,如下所示:
SELECT HEX(name) FROM cities LIMIT 5。有了这些信息,我可以帮助您根据该文章找出修复它的正确方法。 (顺便说一句:我喜欢那篇文章!它救了我好几次。)
标签: sql mysql collation load-data-infile