经评论区朋友的指点,此篇文章存在问题,不把SQL关键字作为字段名才是解决问题的关键。
创新互联公司2013年成立,先为略阳等服务建站,略阳等地企业,进行企业商务咨询服务。为略阳企业网站制作PC+手机+微官网三网同步一站式服务解决您的所有建站问题。
单独针对mysql,可以使用反引号,即`
对于oracle,需要使用双引号加大写,即"KEY"这种,或者直接不加任何符号,不能使用单引号,不然会出现评论区兄弟说的那种情况,即查询结果的字段是返回'key'这种形式。
sql使用单引号
查询见截图,下面返回的查询结果中返回的字段名带有单引号:
查询结果中应该不带单引号的。
所以为了兼顾mysql和oralce,最好的办法是修改字段名,不要涉及sql系统关键字和特殊字段。
在mybatis的xml配置中有如下sql语句:
上述配置,在mysql中会报错
提示有语法错误, key value为msyql系统关键字,解决方法可以是可以用反引号,如下
这样做在mysql中是可以的,不过在oracle中使用反引号会报错
上述mybatis配置中的sql在oracle中执行是没问题的,
所以为了sql在mysql和oracle中都能执行,使用单引号更改sql语句,改完如下:
这样在mysql和oracle中都可以执行了。
你的肯定不是直接在MYSQL执行的查询,你用别的程序调用MYSQL查询的时候,别的程序也需要转义一次。
select '|' regexp '\\|'
select '|' rlike '\\|' 也是一样的 O(∩_∩)O~
MySql字符转义
在字符串中,某些序列具有特殊含义。这些序列均用反斜线(‘\’)开始,即所谓的转义字符。MySQL识别下面的转义序列:
\0 ASCII 0(NUL)字符。
\' 单引号(‘'’)。
\" 双引号(‘"’)。
\b 退格符。
\n 换行符。
\r 回车符。
\t tab字符。
\Z ASCII 26(控制(Ctrl)-Z)。该字符可以编码为‘\Z’,以允许你解决在Windows中ASCII 26代表文件结尾这一问题。(如果你试图使用mysql db_name file_name,ASCII 26会带来问题)。
\\ 反斜线(‘\’)字符。
\%‘%’字符。参见表后面的注解。
\_‘_’字符。参见表后面的注解。
分号不用转义,和普通字符一样.
需要判断一个字符需不需要转义,可以用下面的SQL测试.把;换成相应的字符即可.
select
';'
from
dual
在字符串中,某些序列具有特殊含义。这些序列均用反斜线(‘\’)开始,即所谓的转义字符。MySQL识别下面的转义序列:
\0
一个 ASCII 0 (NUL) 字符。
\'
一个 ASCII 39 单引号 (“'”) 字符。
\"
一个 ASCII 34 双引号 (“"”) 字符。
\b
一个 ASCII 8 退格符。
\n
一个 ASCII 10 换行符。
\r
一个 ASCII 13 回车符。
\t
一个 ASCII 9 制表符(TAB)。
\z
ASCII(26) (Control-Z)。这个字符可以处理在 Windows 系统中 ASCII(26) 代表一个文件的结束的问题。(当使用 mysql database filename 时 ASCII(26) 可能会引起问题产生。)
\\
一个 ASCII 92 反斜线 (“\”) 字符。
\%
一个 ASCII 37 “%” 字符。它用于在正文中搜索“%”的文字实例,否则这里“%”将解释为一个通配符。查看章节 6.3.2.1 字符串比较函数。
\_
一个 ASCII 95 “_” 字符。它用于在正文中搜索“_”的文字实例,否则这里“_”将解释为一个通配符。查看章节 6.3.2.1 字符串比较函数.
注意如果在某些正文环境内使用 “\%” 或 “\_”,将返回字符串 “\%” 和 “\_” 而不是 “%” 和 “_”。
字符串中包含引号的可以有下列几种写法:
一个字符串用单引号“'”来引用的,该字符串中的单引号“'”字符可以用“''”方式转义。
一个字符串用双引号“"”来引用的,该字符串中的“"”字符可以用“""”方式转义。
一个字符串用双引号“"”来引用的,该字符串中的单引号“'”不需要特殊对待而且不必被重复或转义。同理,一个字符串用单引号“'”来引用的,该字符串中的双引号“"”不需要特殊对待而且不必被重复或转义。