Mysql 不正确的字符串值:“\xCC\u a”用于插入时的列

Mysql 不正确的字符串值:“\xCC\u a”用于插入时的列,mysql,Mysql,我试图运行sql查询,但出现以下错误: Incorrect string value: '\xCC_a' for column 断开mysql查询的CSV文件行: Juan Gordon,GarcÃ_a,noman@gmail.com,,,,,,,,,,y, SQL错误: <p>Error Number: 1366</p><p>Incorrect string value: '\xCC_a' for column 'last_name' at row 1&

我试图运行sql查询,但出现以下错误:

Incorrect string value: '\xCC_a' for column
断开mysql查询的CSV文件行:

Juan Gordon,GarcÃ_a,noman@gmail.com,,,,,,,,,,y,
SQL错误:

<p>Error Number: 1366</p><p>Incorrect string value: '\xCC_a' for column 'last_name' at row 1</p><p>INSERT INTO `phppos_people` (`first_name`, `last_name`, `email`, `phone_number`, `address_1`, `address_2`, `city`, `state`, `zip`, `country`, `comments`) VALUES ('Juan Gordon', 'Garc�_a', 'noman@test.com', '', '', '', '', '', '', '', '')</p><p>Filename: /Library/WebServer/Documents/phppos/PHP-Point-Of-Sale/models/person.php</p><p>Line Number: 75</p>  </div>
示例CSV代码
?>


last_name = GarcÌ_a
更新:我刚刚了解到,在excel中将文件保存为.csv时,编码为:Westren Mac OS Roman,CR为换行符


我认为文件编码可能会导致这个问题。但是我需要支持它。

导出到Mac OS的唯一Excel显然是MS Excel for OSX。不幸的是,我没有这个,所以我无法检查如何使用正确的字符集导出

你现在有两个选择

a将CSV转换为UTF-8,例如

在codeigniter中,这看起来像这样

$this->db->simple_query('SET NAMES \'macroman\'');
导入完成后,不要忘记将其设置回原位

$this->db->simple_query('SET NAMES \'utf8\'');
说明:

如果您的连接字符集是UTF-8,则您的数据库不包含UTF-8编码的数据。如果将连接字符集设置为macroman,并且写入的列是UTF-8,MySQL将自动为您转换

设置名称“字符集名称”[COLLATE“排序规则名称”]

SET NAMES指示客户端将使用什么字符集向服务器发送SQL语句。因此,集合名称“cp1251”告诉服务器,“来自此客户端的未来传入消息位于字符集cp1251中。”它还指定服务器应用于将结果发送回客户端的字符集。例如,如果使用SELECT语句,它指示列值要使用的字符集

在我的freeBSD机器上,MySQL编译了macroman字符集,我想你也会有这个

mysql> SELECT * FROM information_schema.COLLATIONS WHERE CHARACTER_SET_NAME = 'macroman';
+---------------------+--------------------+----+------------+-------------+---------+
| COLLATION_NAME      | CHARACTER_SET_NAME | ID | IS_DEFAULT | IS_COMPILED | SORTLEN |
+---------------------+--------------------+----+------------+-------------+---------+
| macroman_general_ci | macroman           | 39 | Yes        | Yes         |       1 |
| macroman_bin        | macroman           | 53 |            | Yes         |       1 |
+---------------------+--------------------+----+------------+-------------+---------+
也看到


希望这有帮助

您确定php正确读取文件吗?尝试打印从csv文件读入另一个文件的值。为什么要打印到文件中?因为控制台有自己的输出编码。在该文件中,检查它读取的值是否具有正确的编码。我在unicode mysql字段中插入了像ç和é这样的特殊字符,没有任何问题。我通过上面的php函数将文件放入,last_name字段显示在GarcÌÌa上面,这是无效的吗?看起来不错。在插入之前是否尝试过SQL请求:SET NAMES utf-8;?我同意@user4035:您很可能没有正确设置。但是有什么特别的原因不使用吗?字符集是utf8。我正在使用codeigniter,您可以在配置文件中进行设置。我没有使用加载数据填充,因为这是一个用户上传的文件。只是好奇:你选择了哪种解决方案?
$this->db->simple_query('SET NAMES \'macroman\'');
$this->db->simple_query('SET NAMES \'utf8\'');
mysql> SELECT * FROM information_schema.COLLATIONS WHERE CHARACTER_SET_NAME = 'macroman';
+---------------------+--------------------+----+------------+-------------+---------+
| COLLATION_NAME      | CHARACTER_SET_NAME | ID | IS_DEFAULT | IS_COMPILED | SORTLEN |
+---------------------+--------------------+----+------------+-------------+---------+
| macroman_general_ci | macroman           | 39 | Yes        | Yes         |       1 |
| macroman_bin        | macroman           | 53 |            | Yes         |       1 |
+---------------------+--------------------+----+------------+-------------+---------+