首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >包含UTF8字符的旧条目在UTF8数据库中保存错误

问包含UTF8字符的旧条目在UTF8数据库中保存错误
EN

Stack Overflow用户
提问于 2012-06-04 20:35:28
回答 2查看 168关注 0票数 2

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

代码语言:javascript
复制
CREATE TABLE `cities` (
  `name` varchar(255) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

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

代码语言:javascript
复制
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
+----------+

我们能做些什么来把那些被压扁的角色变成以前的样子呢?现在我们已经准备好做任何事情了,但是重新输入所有的20万张记录是不可行的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-06-04 20:48:23

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

  1. 将数据转换回latin1:

修改名称varchar(255个)字符集latin1;

  • 将列类型更改为UTF-8,而不更改数据(通过binary):

修改名称varchar(255个)字符集二进制;修改表城市修改名称varchar(255个)字符集utf8;

票数 5
EN

Stack Overflow用户

发布于 2012-06-04 20:41:32

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

就像-

代码语言:javascript
复制
`UPDATE cities
 SET name = REPLACE(name, 'ö', 'ö');`
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10887985

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档