我将内容作为批量上传格式(.csv)插入表格。
在我的CSV中,某些列包含特殊字符,但服务器无法在db中插入包含行的特殊字符并停止执行。
如何插入这些值?
我正在尝试:
$field1= addslashes(trim($data[0]));
我正在使用mysqli_real_escape_string,它正在工作,但它省略了字段中的所有特殊字符...
$field2= mysqli_real_escape_string(trim($data[1]));
答案 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(),它根本没用,只会破坏你的数据。