现在我尝试了以下操作:
PHP:
header("Content-Type: text/html; charset=utf-8");
$mysqli->set_charset("utf8");
MySQL: 我删除了我的数据库并创建了一个新的:
create database db CHARACTER SET utf8 COLLATE utf8_general_ci;
create table ...
我修改了my.cnf并重新启动了我的SQL服务器:
[mysqld]
character-set-server=utf8
collation-server=utf8_general_ci
[mysql]
default-character-set=utf8
如果我通过bash连接到我的数据库,会收到以下输出:
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /usr/local/mysql/share/charsets/ |
一个PHP测试:
var_dump($mysqli->get_charset());
给我:
Current character set: utf8 object(stdClass)#3 (8) { ["charset"]=> string(4) "utf8" ["collation"]=> string(15) "utf8_general_ci" ["dir"]=> string(0) "" ["min_length"]=> int(1) ["max_length"]=> int(3) ["number"]=> int(33) ["state"]=> int(1) ["comment"]=> string(13) "UTF-8 Unicode" }
现在我使用的是:
mysql -uroot -ppw db < require.sql > /tmp/test.csv
require.sql 简单来说就是一个
select * from table;
再次尝试将其作为 csv 导入到 Excel 中,无论我选择 UTF-8 还是其他编码都无法导入。它总是给我一些加密内容。
希望有人能够提供一些关于可能出错的提示。
谢谢
附注:TextMate 给出了正确的输出,因此转换实际上已经成功,这是 Excel 的问题吗?使用 Microsoft Office 2011。
另外,我也尝试了同样的事情,使用 latin1 - 相同的问题,无法在不破坏它们的情况下导入特殊字符到 Excel 中。有什么提示或解决方法吗?
我找到了一个解决方法,可以使用 Excel 导入功能工作,但不能通过双击 .csv 文件来实现。
iconv -f utf8 -t ISO-8859-1 test.csv > test_ISO.csv
现在我可以使用Windows(ANSI)将csv导入Excel。仍然很烦人,因为需要使用此功能而不是双击。而且我真的不明白为什么UTF8不起作用,即使使用导入功能,添加BOM并将整个数据库设置为UTF8也不行。
逗号分隔也很混乱。 1. Concat_WS只部分起作用,因为它会在.csv文件中添加一个愚蠢的concat_ws(..)标头。此外,“file test.csv”没有给我“逗号分隔”。这意味着即使所有内容都用逗号分隔,Excel在双击时也无法识别它。 2. sed/awk:找到了一些代码片段,但它们都将表格分隔得非常糟糕。例如,列街道“街道名称编号”仍然是“街道名称”,“编号”,这样就从一个列中创建了两个列,表格就被搞砸了。
所以对我来说,Excel只能打开通过双击打开的.csv文件 a)编码为ISO-8859-1(仅限于Windows,因为标准Mac字符集是Macintosh) b)文件具有“逗号分隔”属性。这意味着如果我通过Excel本身创建.csv,则输出的...
file test1.csv
would be
test1.csv: ISO-8859 text, with CRLF line terminators
使用正则表达式添加逗号时更改字符集的Iconv可能如下所示:
test1.csv: ISO-8859 text
相当奇怪的行为 - 或许有人找到了解决方案。