MySQL如何写入特殊符号

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL如何写入特殊符号相关的知识,希望对你有一定的参考价值。

比如说我要写入下面的字符串:
D:Program Files\Tencent\QQ\QQProtect\Bin\QQProtect.exe
使用insert into或update写入mysql数据库时,“\”会被忽略,实际写入内容是:
D:Program FilesTencentQQQQProtectBinQQProtect.exe
网上说使用ASCII码,即:chr(92),完整的如下(用VB为例):
"D:Program Files" & chr(92) & "Tencent" & chr(92) & "QQ" & chr(92) & "QQProtect" & chr(92) & "Bin" & chr(92) & "QQProtect.exe"
这显然是自欺欺人的说法,就拿我上面例子来说,我需要保存的是一个文件路径,而这个路径我是不知道的,用户选择什么路径我就保存什么路径,那么我是不可能在程序代码里面写出上面的代码的。

我使用phpMyAdmin是可以写入“\”的 。

请问如何写入这些不能写入字符串?
代码是php运行在服务器上

  $sql="update `qqaide_ini` set `键值`='" . $keynamearr[$i+1] . "' WHERE `PCHash`='" . $PCHash . "' and `小节`='" . $notename . "' and `键名`='" . $keynamearr[$i] . "'";

上面是update代码,$keynamearr是一个数组,里面包含多个值,其中一个就是上面的包含“\”的路径

在sql中给所有字段值加上mysql_real_escape_string函数处理,作用就是给特殊字符进行转义,具体说明网上找

$sql="update `qqaide_ini` set `键值`='" . mysql_real_escape_string($keynamearr[$i+1]) . "' WHERE `PCHash`='" . mysql_real_escape_string($PCHash) . "' and `小节`='" . mysql_real_escape_string($notename) . "' and `键名`='" . mysql_real_escape_string($keynamearr[$i]) . "'";

参考技术A insert into XX(....)values('abc\\abc\\abc');追问

D:Program Files\\Tencent\\QQ\\QQProtect\\Bin\\QQProtect.exe
测试无效

追答

打印出你的SQL来看看,或贴出你的代码,

追问

字符数量限制,SQL语句我写到“补充提问”里面了

追答

这样试试
$sql="update `qqaide_ini` set `键值`='" . addslashes($keynamearr[$i+1]) . "' WHERE `PCHash`='" . addslashes($PCHash) . "' and `小节`='" . addslashes($notename) . "' and `键名`='" . addslashes($keynamearr[$i]) . "'";

本回答被提问者采纳

如何防止写入特殊字符[重复]

【中文标题】如何防止写入特殊字符[重复]【英文标题】:How to prevent writing of special character [duplicate] 【发布时间】:2019-06-21 06:57:16 【问题描述】:

我正在使用 java 将 SQL 表导出到 txt 中。一切正常,除了一个减号问题,即某些字母上的重音符号。 特别是我对“è”有疑问,因为在我的 txt 文件中被转换为“è”。 我不知道为什么,但是如果我尝试导出包含该字段的表的记录(因此写入单个记录),则没有问题;如果我尝试导出整个表(数千条记录),它会给我这个问题。

我已经尝试过 String 类提供的 replace 方法,但结果相同。我也尝试在 unicode 中使用 che 转义字符,但仍然是同样的问题。 有什么提示吗?

编辑 这是我的代码:

if(array_query.equals(versamenti_tasi)) 
                        File myOutputDir = new File("C:\\comuni\\prova\\009_001_Versamenti");
                        if(!myOutputDir.exists())
                            myOutputDir.mkdir(); //Returns a boolean if you want to check it was successful.
                        PrintStream o = new PrintStream(myOutputDir + "\\" + array_query[x].substring(26) + ".txt"); 
                        System.setOut(o);

while (rs.next()) 
    out = "";
    final_index = 0;
    for(int i =1; i <= rsmd.getColumnCount(); i++) 
        if(rs.getString(i) == null) 
           final_index += rsmd.getColumnDisplaySize(i);
           out += "" + str_valore;
           out = out.substring(0, final_index);
        else
           final_index += rsmd.getColumnDisplaySize(i);
           out += rs.getString(i).trim() + str_valore;
           out = out.substring(0, final_index);

        

    
    System.out.println(out);

简而言之,写作部分在循环中; str_valore 是一个 250 字符的空字符串,那是因为我需要获取该字段的原始数据库大小; rs 是我的结果集,rsmd 是元数据结果集

【问题讨论】:

那么,如何将这些表导出到文本文件中呢?您导出单个记录的方式似乎使用了与导出整个表的方式不同的编码。 要么是用于数据库的编码,要么是用于输出文件的编码。 不知道有没有关系,***.com/questions/16208517/… @Hulk 我只是初始化了一个新的打印流并将其设置为我的默认输出,所以我可以使用一个简单的 system.out.println()。 请编辑问题以向我们展示您在做什么 - 在这两种情况下,一种有效,一种无效。某处有所不同,但只有看到代码才能发现。 【参考方案1】:

我不知道您更改了哪个 Eclipse 设置,但我怀疑这会影响您的 PrintStream(它可能读取/呈现文件为 UTF-8)。

要为您的PrintStream 设置编码,请使用适当的构造函数:

改变这一行

PrintStream o = new PrintStream(myOutputDir + "\\" + array_query[x].substring(26) + ".txt");

PrintStream o = new PrintStream(myOutputDir + "\\" + array_query[x].substring(26) + ".txt", 
                    "UTF-8");

(或为您的数据库架构配置的任何编码。)

【讨论】:

谢谢,这解决了我的问题。我更改了首选项>常规>工作区-文本文件编码下的设置,但是正如您所说,这并没有解决问题

以上是关于MySQL如何写入特殊符号的主要内容,如果未能解决你的问题,请参考以下文章

php插入含有特殊符号数据的处理方法

如何修复 £ 符号前的特殊字符 - 399 英镑 - Spring Boot json

word特殊符号录入技巧 如何在word文档中输入特殊符号

如何在EXCEL进行特殊符号的替换

mysql设置复杂密码中含$特殊符号导致无法命令登录

Markdown 如何转意特殊符号