所以我们最初在我们的MySQL数据库中使用了latin1(很久很久以前),我们试图在更全面的推广之前转换为UTF8,但我遇到了过渡问题。这是我的MySQL:
/* First set as latin1 */
SET NAMES 'latin1';
/* We must change things to blob and then back again */
ALTER TABLE `address` CHANGE line_1 line_1 BLOB;
ALTER TABLE `address` CONVERT TO CHARACTER SET utf8;
ALTER TABLE `address` CHANGE line_1 line_1 VARCHAR(64);
我们得到的错误:
Incorrect string value: '\xF6gberg...' for column 'line_1' at row 7578
ALTER TABLE `address` CHANGE line_1 line_1 VARCHAR(64)
我们使用的方法基本上通过这里描述: http://www.percona.com/blog/2013/10/16/utf8-data-on-latin1-tables-converting-to-utf8-without-downtime-or-double-encoding/ 任何想法都会很棒。 (另外,由于我不是MySQL专家,不确定你需要什么样的数据,所以知道你是否还需要其他任何数据。)
更新
我试过
SET NAMES 'utf8';
SET NAMES 'utf8mb4';
我尝试使用utf8mb4,如下所述。切换到utf8mb4(我可能会保留)之后,地址的更改仍然会产生同样的问题。
更新2 所以我试着转换字符串本身来看看发生了什么,并注意到一些非常奇怪的东西:
mysql> select line_1 from address where line_1 like '%berg%';
+------------------------+
| line_1 |
+------------------------+
| H�bergsgatan 97 |
+------------------------+
mysql> select CONVERT(line_1 USING utf8) from address where line_1 like '%berg%';
+----------------------------+
| CONVERT(line_1 USING utf8) |
+----------------------------+
| NULL |
+----------------------------+
mysql> select CONVERT(line_1 USING utf8mb4) from address where line_1 like '%berg%';
+-------------------------------+
| CONVERT(line_1 USING utf8mb4) |
+-------------------------------+
| NULL |
+-------------------------------+
mysql> select CONVERT(line_1 USING latin1) from address where line_1 like '%berg%';
+------------------------------+
| CONVERT(line_1 USING latin1) |
+------------------------------+
| Högbergsgatan 97 |
+------------------------------+
所以似乎utf不适合这个? o_O当我正在处理地址时,我能够查找它,似乎地址在斯德哥尔摩,并且应该是“Högbergsgatan97”,它与latin1相匹配。我尝试了瑞典字符编码,但这似乎也失败了:
mysql> select CONVERT(line_1 USING swe7) from address where addressid = 11065;
+----------------------------+
| CONVERT(line_1 USING swe7) |
+----------------------------+
| H?gbergsgatan 97 |
+----------------------------+
所以我试图看看我能做些什么来纠正这个问题。
另外,请注意我之前忘记说我正在使用MySQL 5.6(如果这有任何区别)