在PHP中,我使用mysql_query($querystring)
将一些信息插入表中。
但是,当我查看MySQL查询日志时,它会显示添加了乱码:
MySQL日志:
INSERT INTO database.table
SET
`col1` = '0^@0^@:^@0^@0^@:^@1^@8',
`col2` = '3^@8^@0',
`col3` = '3^@6^@8',
`col4` = '1^@2'
当我在$ querystring上执行var_dump()时,一切看起来都很好,没有附加^ @。
PHP var_dump() - 注意:我刚编了333号。
string(333) "INSERT INTO database.table
SET
`col1` = '00:00:18',
`col2` = '380',
`col3` = '368',
`col4` = '12'"
然而,MySQL日志显示^ @。有没有办法从$ querystring中剥离^ @?
存储在数据库中的值是'00:00:00'(该字段的默认值),'3','3'和'1'。 Col1的类型为date,Col2-4为smallint(5)。
答案 0 :(得分:2)
桌子到底发生了什么?
也许你在col1
= '00:00:18'之后忘记了“,”?
答案 1 :(得分:1)
确保您的字段类型为VARCHAR
,或者至少为INT
。 MySQL
可能会弄乱你的字符串,使它们适合不合适的类型。
答案 2 :(得分:0)
以下是我最终使用的修复:
/*
Strip hidden gibberish characters inherited from the original .csv file
NOTE: Do a var_dump() to check for hidden gibberish characters, compare the string length from the var_dump() to an eye count of the character length that shows on the screen. Also, check MySQL Query Log to see what characters are being added during INSERT
*/
for($j=0; $j<strlen( $Parts[$i]);$j++)
{
if(is_numeric($Parts[$i][$j]) or $Parts[$i][$j]==':' or $Parts[$i][$j]=='.')
$stringholder.=$Parts[$i][$j];
}
$Parts[$i] = $stringholder;
$stringholder ="";
不是最干净,但完成工作。
答案 3 :(得分:0)
结束编码问题。
修正:
$string_input_to_mysql_query = iconv("UCS-2", "ISO-8859-1", $string_input_to_mysql_query);