MySQL 在加载数据操作期间将 eszett 字符视为“Ø”

MySQL treating eszett character as "ß" during LOAD DATA operation

我正在尝试使用 MySQL 的 LOAD DATA 语句导入 small data set 的柏林街道地址。问题是导入运行后,德国街道名称中所有漂亮的 ß 字符都变成了 ø 集。

这是我为此使用的 create-table 语句 table:

CREATE TABLE `subway_distances` (
  `STN` varchar(255) DEFAULT NULL,
  `HNR` int(9) DEFAULT NULL,
  `Lat` decimal(36,15) DEFAULT NULL,
  `Lon` decimal(36,15) DEFAULT NULL,
  `Distance` decimal(45,20) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8

... 这是我的 MySQL shell 代码:

charset utf8;
TRUNCATE TABLE subway_distances;
LOAD DATA LOCAL INFILE '/path/to/output.csv'
    INTO TABLE berlin.subway_distances
    FIELDS TERMINATED BY ',' ENCLOSED BY '"' ESCAPED BY '\';
SELECT * FROM subway_distances LIMIT 0,10;

我看过 vim 中的 output.csv,那里的 eszett 字符似乎没问题。

我假设我只需要在 MySQL 中使用不同的编码声明,但我不确定从哪里开始。

我还假设归类并不重要,因为我不是在比较值——只是单纯地尝试获得有效的导入。

我很快就找到了答案。看起来我只需要在我的 LOAD DATA 语句中指定 CHARACTER SET 值。所以新语句看起来像这样:

LOAD DATA LOCAL INFILE '/path/to/output.csv'
    INTO TABLE berlin.subway_distances
    CHARACTER SET 'utf8'
    FIELDS TERMINATED BY ',' ENCLOSED BY '"' ESCAPED BY '\';