MySQL数据库排序规则和字符集

时间:2010-02-05 01:27:26

标签: mysql character-encoding symfony1 yaml

我有一个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)?我过去成功地进口了它。我不记得自那以后发生了什么变化

3 个答案:

答案 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导出。