使用mysql命令删除字符串中的转义符号[关闭]

Posted

技术标签:

【中文标题】使用mysql命令删除字符串中的转义符号[关闭]【英文标题】:Remove escape symbols in string using mysql command [closed] 【发布时间】:2021-12-31 20:12:11 【问题描述】:

我有一个 mysql 列,其中的数据看起来像这样,

我需要通过convert(somecolumn,JSON) 将列转换为JSON 格式。但是,似乎我首先需要删除转义符号(例如,\")。我做了一些搜索,发现mysql_real_escape_string 可以完成这项工作(来自this question)。

但如果我理解正确的话,mysql_real_escape_string 是一个 php 命令。是否有任何与mysql_real_escape_string(类似于convert(mysql_native_function(somecolumn),JSON))做类似事情的原生MySQL命令?

【问题讨论】:

【参考方案1】:

使用REPLACE。对于更难的事情 REGEXP_REPLACE。

SELECT REPLACE(somecolumn, '\"', '"')
SELECT REGEXP_REPLACE('"..."', '(^"|"$)', '')

后者将取消引用整个字符串,因为^ 是开头,$ 是结尾。

顺便说一句,我实际上会更正表中的所有数据一次。 (备份后。)

【讨论】:

【参考方案2】:

mysql 库太旧了.. 如果你真的需要使用类似的东西 - 使用 mysqli

mysql_real_escape_string 并不像您想象的那么安全,请参阅:https://security.stackexchange.com/questions/8028/does-mysql-escape-string-have-any-security-vulnerabilities-if-all-tables-using-l

也就是说,你最好不要使用它们中的任何一个,而是使用 Php PDO 并替换类似的东西:

$data = [
    'name' => $name,
    'surname' => $surname,
    'sex' => $sex,
];
$sql = "INSERT INTO users (name, surname, sex) VALUES (:name, :surname, :sex)";
$stmt= $pdo->prepare($sql);
$stmt->execute($data);

它会为你解决“逃避”问题。

更多示例:https://phpdelusions.net/pdo_examples/insert

【讨论】:

以上是关于使用mysql命令删除字符串中的转义符号[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

Python字符串格式化符号及转义字符含义

Python字符串格式化符号及转义字符含义

shell通配符特殊符号与转义符

如何转义变量中的特殊字符以在 bash 中提供命令行参数

从 Python 中的字符串中删除转义实体 [重复]

ssh远程执行命令的符号转义问题