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>

姓氏是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 作为换行符。

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

4

1 回答 1

2

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

你现在有两个选择

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

希望这可以帮助

于 2013-01-11T18:56:47.660 回答