如何使用php在DB中插入ISO-8859-1 charset值

时间:2017-03-28 11:03:07

标签: php mysql utf-8 insert special-characters

我将内容作为批量上传格式(.csv)插入表格。

在我的CSV中,某些列包含特殊字符,但服务器无法在db中插入包含行的特殊字符并停止执行。

如何插入这些值?

我正在尝试:

$field1= addslashes(trim($data[0]));

我正在使用mysqli_real_escape_string,它正在工作,但它省略了字段中的所有特殊字符...

$field2= mysqli_real_escape_string(trim($data[1])); 

2 个答案:

答案 0 :(得分:1)

不要调用任何转换例程。只需声明.csv文件是latin1编码的。在LOAD DATA语句中使用此子句执行此操作:

CHARACTER SET latin1

你还没有说过列/表是什么字符集。请提供SHOW CREATE TABLE。该列可以是latin1或utf8。

另外,使用mysqli_set_charset来确定客户端代码正在使用哪个charset。 (它不需要与列/表相同。)

你说“省略特殊字符”。您是说数据存储在表中,但是在特殊字符处截断了字符串?请参阅Trouble with utf8 characters; what I see is not what I stored中的“截断文字”。

你说“停止执行”。这似乎不太可能;请提供更多详细信息,例如导致终止的SQL,是否在其后运行其他命令,是否需要再次启动(而不是“重启”)mysqld。

你说“特殊字符”;让我们看一些例子。您使用转义来获取$ field变量,但是您对这些变量做了什么?

答案 1 :(得分:0)

MySQL应该自动进行转换,只要你告诉它你的数据使用的编码。使用mysqli扩展,您可以使用mysqli::set_charset()函数。

如果你的应用程序没有使用ISO-8859-1且只有你当前的数据集,你需要声明应用程序编码并自己转换数据。您至少有三个功能:

在任何一种情况下,如果发生不兼容的转换,您将收到SQL错误。如果数据库使用包含所有ISO-8859-1字符(例如UTF-8)的编码,则不应该是这种情况。

注意:摆脱addslashes(),它根本没用,只会破坏你的数据。