作为一名自学成才的新手,我为自己创造了一个大问题。在将数据插入到我的数据库之前,我一直在将字符串中的撇号(')转换为双引号(“”),而不是MySQL实际需要的所需的反斜杠和撇号(\')。
在我的桌子增长超过20万行之前,我认为最好立即纠正这个问题。所以我做了一些研究并找到了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无法实现这一目标?
答案 0 :(得分:116)
只运行SELECT
语句对数据没有影响。您必须对UPDATE
使用REPLACE
语句才能进行更改:
UPDATE photos
SET caption = REPLACE(caption,'"','\'')
以下是工作示例:http://sqlize.com/7FjtEyeLAh
答案 1 :(得分:12)
替换下面的字符
~ ! @ # $ % ^ & * ( ) _ +
` - =
{ } |
[ ] \
: "
; '
< > ?
, .
使用此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
答案 2 :(得分:3)
也许我会这样做。
SQL = SELECT REPLACE(myColumn, '""', '\'') FROM myTable
我使用单引号,因为那是在MySQL中注册字符串表达式的那个,或者我相信。
希望有所帮助。
答案 3 :(得分:0)
如果您有“某事”且需要“某事”,请使用replace(col, "\"", "\'")
反之亦然。