MySQLでは、全角のシングルクオーテーションを半角のシングルクオーテーションと同じように扱う
「'」を「’」と同じに扱うようだ。
これまで、SQL Server Express しか使ってなかったから、
同じようなもんだろと思っててハマってしまった。
ちなみに私の場合、下記のような関数を使って、
文字列をInsertする前には必ずこの関数を通した文字列を使うようにしてる。
SQL文とかhtmlとかに関するエラーを回避する意図。
※VisualBasicです
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
Function SafeChar(ByVal S As String) As String Dim Txt As String Txt = Replace(S, "'", "") Txt = Replace(Txt, "’", "") Txt = Replace(Txt, """", "") Txt = Replace(Txt, Chr(&H8167), "") '“ Txt = Replace(Txt, Chr(&H8168), "") '” Txt = Replace(Txt, "‘", "") '「‘」 Txt = Replace(Txt, "`", "") '「‘」 Txt = Replace(Txt, ",", "") Txt = Replace(Txt, "<", "") Txt = Replace(Txt, ">", "") Txt = Replace(Txt, "/", "") Txt = Replace(Txt, ControlChars.CrLf, "") Txt = Replace(Txt, ControlChars.Cr, "") Txt = Replace(Txt, ControlChars.Lf, "") Txt = Replace(Txt, ControlChars.Tab, "") Txt = Replace(Txt, ControlChars.NullChar, "") Txt = Replace(Txt, ControlChars.Back, "") '文字化け対策 Txtの中に"?"が2割以上入っていたら文字化けと看做す If CSng(CntStr(Txt, "?")) / CSng(Len(Txt)) > 0.2 Then Txt = "文字化けしてるよ!!!!" End If SafeChar = Txt End Function |