字符串值不正确:插入时列的'\ xCC_a'

时间:2013-01-06 14:57:14

标签: 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</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为换行符。

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

1 个答案:

答案 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'collat​​ion_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

希望这有帮助