好的,所以我确保我的MySQL(5.1.61)数据库是UTF8,表是UTF8,字段是UTF8,MySQL客户端的字符集设置为UTF8.我可以成功存储和检索UTF8条目.我还确保我的终端编码设置为UTF8.
CREATE TABLE `cities` (
`name` varchar(255) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
Run Code Online (Sandbox Code Playgroud)
当涉及数据库中已存在的200,000个条目时的问题.看来我们继承该项目的人搞砸了很多编码,实际上保存了一个字符串,就像Hörby
在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
+----------+
Run Code Online (Sandbox Code Playgroud)
我们可以做些什么来将压扁的角色转换成曾经的角色?我们已准备好在此处做任何事情,但重新输入所有200,000条记录是不可行的.
看起来您之前已将utf8
编码字符串存储在latin1
列中,然后将该列转换为utf8
.解决这个问题:
将数据转换回latin1
:
ALTER TABLE cities MODIFY name varchar(255) CHARACTER SET latin1;
Run Code Online (Sandbox Code Playgroud)将列类型更改为UTF-8而不更改数据(通过binary
):
ALTER TABLE cities MODIFY name varchar(255) CHARACTER SET binary;
ALTER TABLE cities MODIFY name varchar(255) CHARACTER SET utf8;
Run Code Online (Sandbox Code Playgroud) 归档时间: |
|
查看次数: |
165 次 |
最近记录: |