我正在尝试运行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>
last_name是varchar(255) utf8_unicode_ci
$db['default']['char_set'] = 'utf8';
$db['default']['dbcollat'] = 'utf8_unicode_ci';
示例CSV代码
?>
last_name = GarcÌ_a
更新:我刚刚了解到,在excel中将文件保存为.csv时,编码为:Westren(Mac OS Roman),CR为换行符。
我认为文件编码可能会导致问题。但我需要支持它。
答案 0 :(得分:2)
导出到Mac OS Roman的唯一Excel显然是MS Excel for OSX。不幸的是我没有这个,所以我无法检查如何使用正确的字符集导出
您现在有两个选择
a)使用iconv将CSV转换为UTF-8,例如
iconv -f MACROMAN -t UTF8 < yourfile.csv > yourfile-utf8.csv
b)在导入之前将连接字符集设置为文件的字符集
SET NAMES macroman;
在codeigniter中,这看起来像这样
$this->db->simple_query('SET NAMES \'macroman\'');
导入完成后,请不要忘记将其重新设置
$this->db->simple_query('SET NAMES \'utf8\'');
<强>解释强>
如果您的连接字符集是UTF-8,则您的数据库不包括UTF-8编码数据。如果将连接字符集设置为macroman
并且您写入的列是UTF-8,MySQL将自动为您转换。
来自http://dev.mysql.com/doc/refman/5.5/en/charset-connection.html
SET NAMES'charset_name'[COLLATE'collation_name']
SET NAMES表示客户端将用于将SQL语句发送到服务器的字符集。因此,SET NAMES'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 |
+---------------------+--------------------+----+------------+-------------+---------+
另见http://dev.mysql.com/doc/refman/5.5/en/charset-charsets.html
希望这有帮助