2

好的,所以我已经确保我的 MySQL(5.1.61)数据库是 UTF8,表是 UTF8,字段是 UTF8,并且 MySQL 客户端的字符集设置为 UTF8。我可以成功存储和检索 UTF8 条目。我还确保我的终端编码设置为 UTF8。

CREATE TABLE `cities` (
  `name` varchar(255) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

当涉及到数据库中已经存在的 200,000 个条目时的问题。看来我们继承该项目的人搞砸了很多编码,实际上保存了一个字符串,例如HörbywhereHörbyÃ有效的 UTF8 字符。也就是说,MySQL 正在接收 UTF8 字符串Hörby并将其存储为. 这是一个示例,其中第一个条目是旧条目之一,第二个是我们将“ Hörby”插入数据库,并将所有内容设置为 UTF8:

mysql> INSERT INTO cities SET name = 'Hörby';
Query OK, 1 row affected (0.00 sec)

mysql> SELECT * FROM cities;
+----------+
| name     |
+----------+
| Hörby   | <--- old entry
| Hörby    | <--- new entry
+----------+

我们可以做些什么来将被压扁的角色变成他们曾经的样子?在这一点上,我们几乎已经准备好做任何事情,但是重新键入所有 200,000 条记录是不可行的。

4

2 回答 2

5

看起来您之前已将utf8编码字符串存储在一个latin1列中,然后将该列转换为utf8. 要解决这个问题:

  1. 将数据转换回latin1

    ALTER TABLE cities MODIFY name varchar(255) CHARACTER SET latin1;
    
  2. 在不更改数据的情况下将列类型更改为 UTF-8(通过binary):

    ALTER TABLE cities MODIFY name varchar(255) CHARACTER SET binary;
    ALTER TABLE cities MODIFY name varchar(255) CHARACTER SET utf8;
    
于 2012-06-04T20:48:23.170 回答
0

您可以REPLACE在 MYSQL 中使用该函数。

就像是 -

`UPDATE cities
 SET name = REPLACE(name, 'ö', 'ö');`
于 2012-06-04T20:41:32.020 回答