mysql字段名和關鍵字沖突的問題
mysql字段名和關鍵字沖突
1.用"(`)"將有沖突的字段框起來,鍵盤上1邊上那個鍵。
例:
SELECT * FROM yun_roleright WHERE right LIKE '%{13}%';
上面sql語句中right字段名與關鍵字沖突,會報錯,,,應改成下面:
SELECT * FROM yun_roleright WHERE `right` LIKE '%{13}%';
mysql關鍵字沖突導致的sql執(zhí)行錯誤
最近出現(xiàn)了一個很有意思的情況
我一共有三個數(shù)據(jù)庫,開發(fā),測試,正式,
分別放置在不同的服務器上
都是mysql數(shù)據(jù)庫
這個時候出現(xiàn)了一個有意思的問題
我的sql如下
SELECT count(0) FROM sys_log WHERE system = 'system'
在開發(fā)和測試數(shù)據(jù)庫上執(zhí)行此sql,沒有問題
但是在正式環(huán)境的數(shù)據(jù)庫上執(zhí)行此sql,就會報如下錯誤
納悶了半天,確定就是關鍵字的問題
但是比對了三個數(shù)據(jù)庫,確實又沒找到不同點,問大佬,大佬太忙,也沒細究
解決辦法
方案1:修改字段名(推薦)
注意:但是千萬不要用sql語句去改,因為語句中含有關鍵字,所以sql是不會執(zhí)行成功的,所以只能去數(shù)據(jù)庫管理工具中修改
ALTER table sys_log change system system1 varchar(255) CHARSET utf8 COLLATE utf8_general_ci NULL COMMENT '系統(tǒng)'
【修改字段的名稱】
語法: alter table <表名> change <字段名> <字段新名稱> <字段的類型>。
方案2:修改執(zhí)行sql
SELECT count(0) FROM sys_log s WHERE s.system = 'system'
或者
SELECT count(0) FROM sys_log WHERE `system` = 'system'
其他相關
注意:當出現(xiàn)關鍵字的時候,然后業(yè)務層使用的sql借助了mybatis-plus框架寫的,如
public PageInfo<SysAuditLogDTO> selectAuditLog(ConditionDTO conditionDTO, Integer pageNum, Integer pageSize) { LambdaQueryWrapper<SysLogEntity> wrapper = Wrappers.<SysLogEntity>lambdaQuery() .orderByDesc(SysLogEntity::getCreateTime); if (StrUtil.isNotEmpty(conditionDTO.getSystem())) { wrapper.eq(SysLogEntity::getSystem, conditionDTO.getSystem()); } if (conditionDTO.getStart() != null) { wrapper.ge(SysLogEntity::getCreateTime, conditionDTO.getStart()); } if (conditionDTO.getFinish() != null) { Calendar calendar = Calendar.getInstance(); calendar.setTime(conditionDTO.getFinish()); calendar.add(Calendar.DATE, 1); wrapper.le(SysLogEntity::getCreateTime, calendar.getTime()); } Page<SysLogEntity> page = PageHelper.startPage(pageNum, pageSize).doSelectPage(() -> list(wrapper)); return auditLogMapper.toDto(page.toPageInfo()); } //注:PageHelper是內部的一個工具類,對數(shù)據(jù)進行分頁處理
有兩種辦法:
方案一:在xml文件中寫sql
業(yè)務層調用:(中間省略了dao)
public PageInfo<SysLogEntity > selectLog(ConditionDTO conditionDTO, Integer pageNum, Integer pageSize) { Page<SysLogEntity> page = PageHelper.startPage(pageNum, pageSize).doSelectPage(() -> sysLogDao.sysAuditLogListByQueryConditions(conditionDTO)); return auditLogMapper.toDto(page.toPageInfo()); }
mapper.xml文件
<insert id="addOne"> insert into sys_log (id, `system`) values (#{SysLogEntity.id},#{SysLogEntity.system}); </insert>
方案二:實體類@TableField中添加 ``(推薦)
這樣就支持mybatis-plus框架寫法
@Data @TableName("sys_log") public class SysLogEntity implements Serializable { private static final long serialVersionUID = 1L; /** * id */ @TableId private Long id; /** * 系統(tǒng) */ @TableField("`SYSTEM`") private String system; }
總結
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
在Windows環(huán)境下安裝MySQL 的教程圖解
這篇文章主要介紹了在Windows環(huán)境下安裝MySQL 的教程圖解,本文圖文并茂給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下2019-07-07