我有一个mySQL数据库,其中包含排序规则和字符集,如下所示:
mysql> show variables like "character_set_database";
+------------------------+-------+
| Variable_name | Value |
+------------------------+-------+
| character_set_database | utf8 |
+------------------------+-------+
1 row in set (0.00 sec)
mysql> show variables like "collation_database";
+--------------------+-----------------+
| Variable_name | Value |
+--------------------+-----------------+
| collation_database | utf8_unicode_ci |
+--------------------+-----------------+
1 row in set (0.00 sec)
我有一张国家/地区表,其中包含一个id,id和name。当我尝试导入这个国家时(例如'外国'字符)
São Tomé and Príncipe
I get the following error:
Unable to execute INSERT statement. [wrapped: SQLSTATE[HY000]: General error:
1366 Incorrect string value: '\xE3\xA3o To...' for column 'name' at row 1]
我过去导入了这些数据 - 有没有人知道为什么我不能导入这些数据(如yml fixtures)?我过去成功地进口了它。我不记得自那以后发生了什么变化
答案 0 :(得分:2)
\xE3\xA3o To...
嗯,这是正确的,这不是一个有效的字节序列。 UTF-8中的ã
应为\xC3\xA3
。看起来某人有人将导入数据加载为ISO-8859-1并将其大小写折叠为小写,将C3
字节转换为E3
。当然,结果不再是UTF-8。
需要更多有关导入过程的详细信息才能说明。
答案 1 :(得分:0)
将<?php header('Content-Type: text/plain; charset=utf-8'); ?>
放在fixtures.yml文件的顶部。
答案 2 :(得分:0)
我不会使用fixtures.yml来上传这样的复杂数据。我有一个非常类似的情况/设置,我使用MySQL的LOAD DATA INFILE没有任何问题。
LOAD DATA INFILE 'C:/development/cities.csv' INTO TABLE project.city CHARACTER SET utf8
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\r';
... cities.csv是OpenOffice Calc的UTF-8导出。