【问题标题】:MySQL - Replace Character in ColumnsMySQL - 替换列中的字符
【发布时间】:2011-12-05 18:03:21
【问题描述】:

作为一个自学成才的新手,我给自己制造了一个大问题。在将数据插入数据库之前,我一直在将字符串中的撇号 (') 转换为双引号 (""),而不是 MySQL 实际需要的反斜杠和撇号 (\')。

在我的表增长到超过 200,000 行之前,我认为最好立即纠正这个问题。所以我做了一些研究,发现了 SQL REPLACE 函数,这很好,但我现在很困惑。

在 ASP 中,我是这样做的:

str = Replace(str,"'","""")

如果我在 SQL Workbench 中查看我的数据库,我转换的符号现在是一个单引号 ("),这让我有点困惑。我明白为什么它从双引号变为单引号,但我不知道是哪个我现在打算换一个。

要使用 SQL REPLACE 解决并纠正我的问题,我现在是将单引号 (") 转换为反斜杠和撇号 (\') 还是将双引号 ("") 转换为反斜杠和撇号 ( \')?

例如,这个:

SQL = " SELECT REPLACE(myColumn,"""","\'") FROM myTable "

或者这个:

SQL = " SELECT REPLACE(myColumn,""","\'") FROM myTable "

我希望我能很好地解释自己,任何建议都像往常一样感激地接受。对我的问题有任何疑问,请发表评论。

非常感谢

-- 更新--

我尝试了以下查询,但仍然无法更改数据中的 ( " ):

SELECT REPLACE(caption,'\"','\'') FROM photos WHERE photoID = 3371
SELECT REPLACE(caption,'"','\'') FROM photos WHERE photoID = 3371
SELECT REPLACE(caption,'""','\'') FROM photos WHERE photoID = 3371

如果我搜索:

SELECT COUNT(*) FROM photos WHERE caption LIKE '%"%'

我得到 16,150 行。

-- 更新 2 --

好吧,我已经创建了一个“解决方法”。我设法使用以下 SQL 快速转换了整个列,编写了一个 ASP 脚本:

SELECT photoID, caption FROM photos WHERE caption LIKE '%""%';

然后在 ASP 中我做了:

caption = Replace(caption,"""","\'")

但我还是想知道为什么我不能用 SQL 实现这一点?

【问题讨论】:

  • 您确实需要阅读有关使用参数化查询的信息。这将防止您的应用程序容易受到 SQL 注入的攻击
  • 请注意,在 ASP 中,使用 """" 呈现为单引号 (") 的值,而不是双引号 (""),因为在字符串内部,a引号由两个引号表示(转义)。
  • 那是我学习约翰的名单上的下一个,是的。我有一个正则表达式函数,可以检查输入值和查询字符串中是否存在恶意内容,但我确信这并不安全......
  • 感谢 mellamokb,但正如我在问题中所说,我确实理解 为什么 他们改为单引号。我现在需要知道的是如何在替换函数中引用它们。我现在换双打还是单打?

标签: mysql sql database


【解决方案1】:

只运行SELECT 语句不会对数据产生影响。您必须使用带有 REPLACEUPDATE 语句来进行更改:

UPDATE photos
   SET caption = REPLACE(caption,'"','\'')

这是一个工作示例:http://sqlize.com/7FjtEyeLAh

【讨论】:

  • 非常感谢!!我现在明白了,选择会打印转换,但更新实际上会更新数据库......
  • 要在不更改数据库的情况下进行检查,请先尝试:SELECT * FROM photos WHERE LOCATE('"','\')>0
  • 这不应该是公认的答案了...... REPLACE 函数在 MySQL 上工作得很好
【解决方案2】:

替换下面的字符

~ ! @ # $ % ^ & * ( ) _ +
` - = 
{ } |
[ ] \
: " 
; '

< > ?
, . 

使用这条 SQL

SELECT note as note_original, 

    REPLACE(
        REPLACE(
            REPLACE(
                REPLACE(
                    REPLACE(
                        REPLACE(
                            REPLACE(
                                REPLACE(
                                    REPLACE(
                                        REPLACE(
                                            REPLACE(
                                                REPLACE(
                                                    REPLACE(
                                                        REPLACE(
                                                            REPLACE(
                                                                REPLACE(
                                                                    REPLACE(
                                                                        REPLACE(
                                                                            REPLACE(
                                                                                REPLACE(
                                                                                    REPLACE(
                                                                                        REPLACE(
                                                                                            REPLACE(
                                                                                                REPLACE(
                                                                                                    REPLACE(
                                                                                                        REPLACE(
                                                                    REPLACE(
                                                                        REPLACE(
                                                                            REPLACE(
                                                                                REPLACE(
                                                                                    REPLACE(
                                                                                        REPLACE(
                                                                                            REPLACE(note, '\"', ''),
                                                                                        '.', ''),
                                                                                    '?', ''),
                                                                                '`', ''),
                                                                            '<', ''),
                                                                        '=', ''),
                                                                    '{', ''),
                                                                                                        '}', ''),
                                                                                                    '[', ''),
                                                                                                ']', ''),
                                                                                            '|', ''),
                                                                                        '\'', ''),
                                                                                    ':', ''),
                                                                                ';', ''),
                                                                            '~', ''),
                                                                        '!', ''),
                                                                    '@', ''),
                                                                '#', ''),
                                                            '$', ''),
                                                        '%', ''),
                                                    '^', ''),
                                                '&', ''),
                                            '*', ''),
                                        '_', ''),
                                    '+', ''),
                                ',', ''),
                            '/', ''),
                        '(', ''),
                    ')', ''),
                '-', ''),
            '>', ''),
        ' ', '-'),
    '--', '-') as note_changed FROM invheader

【讨论】:

  • 太棒了...应该保存它:)
  • ⁣⁣⁣(⁣⁣⁣⊙⁣⁣⁣.⁣⁣⁣☉⁣⁣⁣)⁣⁣⁣⁣⁣
  • 感谢奥马尔的存在!
  • 天啊,你是 stackoverflow 中最棒的人!这个答案太棒了,感谢上帝,我读了它,现在我的生活变得不同了,更快乐了
  • 非常了不起的家伙。
【解决方案3】:

也许我会这样做。

 SQL = SELECT REPLACE(myColumn, '""', '\'') FROM myTable

我使用单引号是因为那是在 MySQL 中注册字符串表达式的单引号,或者我相信。

希望对您有所帮助。

【讨论】:

  • 我在一行上运行了这个,检查了之后的行,它仍然有(“)。我正在编辑我的问题,向你展示我尝试过的其他变体
  • 标题是否有除引号以外的其他值?
  • 示例说明 [布拉德皮特穿着安吉丽娜朱莉的比基尼]
【解决方案4】:

如果您有“某事”并需要“某事”,请使用replace(col, "\"", "\'"),反之亦然。

【讨论】:

  • 这不起作用,我在一行上运行它,检查了该行,它仍然包含 (")
  • SUBSTRING(data, 1, LEN(data)) -我不确定参数中是 1 还是 2,但这会从字符串中删除第一个和最后一个字符,所以“不管什么”或“随便什么”,都应该输出为什么。
  • 不幸的是,我有像 [Kate Moss's]、[O'Sullivan] 和 ['whatever'] 这样的数据
猜你喜欢
  • 2023-02-14
  • 2016-09-28
  • 2012-04-27
  • 2013-11-03
  • 2014-07-29
  • 2012-10-31
  • 1970-01-01
  • 2011-08-22
相关资源
最近更新 更多