所以我们最初为我们的 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 -双重编码/ 任何想法都会很棒。(另外,由于我不是 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 因为我正在处理地址,所以我能够查找它,并且该地址似乎在斯德哥尔摩,并且应该是与 latin1 匹配的“Högbergsgatan 97”。我尝试了瑞典字符编码,但这似乎也失败了:
mysql> select CONVERT(line_1 USING swe7) from address where addressid = 11065;
+----------------------------+
| CONVERT(line_1 USING swe7) |
+----------------------------+
| H?gbergsgatan 97 |
+----------------------------+
所以我想看看我能做些什么来纠正这个问题。
另外,请注意我之前忘记声明我使用的是 MySQL 5.6(如果这有什么不同的话)