使用Go进行Mysql开发时,会遇到引号问题(实际上,与语言无关,只要使用sql就会遇到这些类似问题)。

本文举例说明如何解决这些问题。

Example1

第一例子演示格式字符是否要加引号。

代码如下:

detailMsg := "abc"

sql := fmt.Sprintf(
"insert into tbl_log(ip, name, detail_msg) values ('%s', '%s', %s)",
"1.1.0.1",
"test.py",
detailMsg,
)
fmt.Println("sql: ", sql)

output:

2018/04/05 17:40:00 sql: insert into tbl_log(ip, name, detail_msg) values ('1.1.0.1', 'test.py', abc)

2018/04/05 17:40:00 exec failed: Error 1054: Unknown column 'abc' in 'field list' , sql: insert into tbl_log(ip, name, detail_msg) values ('1.1.0.1', 'test.py', abc)

如果字段类型是字符串,格式化字符需要加上两个单引号,也就是格式字符%s改为'%s' .

正确示例

detailMsg := "abc"
sql := fmt.Sprintf(
"insert into tbl _log(ip, name, detail_msg) values ('%s', '%s', '%s')",
"1.1.0.1",
"test.py",
detailMsg,
) fmt.Println("sql: ", sql)

output

sql: insert into tbl_log(ip, name, detail_msg) values ('1.1.0.1', 'test.py', 'abc')

Example2

如果插入的内容中包含单引号,例子如下。

也就是detailMsg中如果有单引号。

detailMsg := "ab'c"
fmt.Println("detailMsg: ", detailMsg)
sql := fmt.Sprintf(
"insert into tbl_log(ip, name, detail_msg) values ('%s', '%s', '%s')",
"1.1.0.1",
"test.py",
detailMsg,
) fmt.Println("sql: ", sql)

output

2018/04/05 17:45:03 detailMsg: ab'c

2018/04/05 17:45:03 sql: insert into tbl _log(ip, name, detail_msg) values ('1.1.0.1', 'test.py', 'ab'c')

2018/04/05 17:45:03 exec failed: Error 1064: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'c')' at line 1 , sql: insert into tbl_log(ip, name, detail_msg) values ('1.1.0.1', 'test.py', 'ab'c')

解决办法

对内容中的单引号进行转义 '.

detailMsg:= "ab'c"
detailMsg = strings.Replace(detailMsg, "'", "\\'", -1)
log.Println("detailMsg:", detailMsg) sql := fmt.Sprintf(
"insert into tbl_log(ip, name, detail_msg) values ('%s', '%s', '%s')",
"1.1.0.1",
"test.py",
detailMsg,
) log.Println("sql:", sql)

output:

2018/04/05 17:48:11 detailMsg: ab'c

2018/04/05 17:48:11 sql: insert into tbl_log(ip, name, detail_msg) values ('1.1.0.1', 'test.py', 'ab'c')

Go sql语句引号问题的更多相关文章

  1. Java中sql语句的引号问题

    1..sql语句 在数据库中,当我们查询语句时,会使用类似的语句: Select * from userinfo where userid='1' or 1; Select * from userin ...

  2. (转载)总结一下SQL语句中引号(')、quotedstr()、('')、format()在SQL语句中的用法

    总结一下SQL语句中引号(').quotedstr().('').format()在SQL语句中的用法 总结一下SQL语句中引号(').quotedstr().('').format()在SQL语句中 ...

  3. 总结一下SQL语句中引号(')、quotedstr()、('')、format()在SQL语句中的用法

    总结一下SQL语句中引号(').quotedstr().('').format()在SQL语句中的用法 日期:2005年6月1日 作者:seasky212 总结一下SQL语句中引号(').quoted ...

  4. sql语句中单引号嵌套问题

    在sql语句中,我们难免会用到单引号嵌套的时候,但是直接嵌套肯定是不行的,java中用反斜杠做转义符也是不行的,在sql中是用单引号来做转义符的. 比如下面例子是存储过程里查询时的语句示例 exec ...

  5. (转载)总结一下SQL语句中引号(')、quotedstr()、('')、format()在SQL语句中的用法

    总结一下SQL语句中引号(').quotedstr().('').format()在SQL语句中的用法以及SQL语句中日期格式的表示(#).('')在Delphi中进行字符变量连接相加时单引号用('' ...

  6. [转]关于oracle sql语句查询时表名和字段名要加双引号的问题

    oracle初学者一般会遇到这个问题.   用navicat可视化创建了表,可是就是不能查到!   后来发现②语句可以查询到 ①select * from user; 但是,我们如果给user加上双引 ...

  7. sql语句,加引号和不加引号的区别

    今天碰到个问题,查询数据的时候,显示表不存在,在可视化窗口确实能看见.试着给表名加个引号,发现能成功查询数据了.上网查询原因如下: 1.oracle表和字段是有大小写的区别.oracle默认是大写,如 ...

  8. 在awk中通过system调用sql语句来说明引号的使用

    一个实际应用例子: 在awk中,通过system调用连接数据库并作select操作,select语句中where条件来自于一个文件(file)的第一个域($1). $ cat file ... ... ...

  9. Java的sql语句 写关键字不需要添加单引号

    Java的sql语句 写关键字不需要添加单引号

随机推荐

  1. ubantu 安装mysql 5.7 解决安装不提示设置密码问题

    1.安装Mysql sudo apt-get install mysql-server sudo apt-get install mysql-client sudo apt-get install l ...

  2. 使用golang编写prometheus metrics exporter

    metrcis输出 collector.go package main import ( "github.com/prometheus/client_golang/prometheus&qu ...

  3. lava.lang.String数据转换为java.sql.Date

    在JavaWeb编程中,往往涉及数据库,javaBean,前端数据数据类型不一致的问题 数据库和javaBean之间可以直接选择相对应的数据类型,而serverlet从前端获取的数据往往是String ...

  4. LBS推荐系统的设计方法

    https://www.csdn.net/article/2015-12-24/2826554 http://www.datayuan.cn/article/14797.htm https://my. ...

  5. Mariadb使用xtrabackup工具备份数据脚本

    #!/bin/bash#这个脚本用来备份SQL文件: sql_home="/home/mysql"sql_bak_log="$sql_home/xtrabackup.lo ...

  6. golang相关网摘

    1.golang开发50个坑 http://devs.cloudimmunity.com/gotchas-and-common-mistakes-in-go-golang/index.html#mli ...

  7. P3084 [USACO13OPEN]照片Photo (dp+单调队列优化)

    题目链接:传送门 题目: 题目描述 Farmer John has decided to assemble a panoramic photo of a lineup of his N cows ( ...

  8. mvc core2.1 Identity.EntityFramework Core 导航状态栏(六)

    之前做的无法 登录退出,和状态,加入主页导航栏 Views ->Shared->_Layout.cshtml <div class="navbar-collapse col ...

  9. C++学习(三十)(C语言部分)之 栈和队列

    数据结构1.保存数据 2.处理数据数组+操作增查删改 栈和队列是一种操作受限的线性表 栈 是先进后出 是在一端进行插入删除的操作--->栈顶 另一端叫做栈底(栈和栈区是两个概念)(是一种数据结构 ...

  10. selected标签判断默认选中

    <select name="suggestedType" style="width:280px" > <option value=" ...