一尘不染

MySQL-替换列中的字符

mysql

作为一个自学成才的新手,我为自己创造了一个大问题。在将数据插入数据库之前,我一直在将字符串中的撇号(’)转换为双引号(“”),而不是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做到这一点?


阅读 243

收藏
2020-05-17

共1个答案

一尘不染

仅运行SELECT语句不会对数据产生影响。您必须在上使用一条UPDATE语句REPLACE来进行更改:

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

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

2020-05-17