来源:http://blog.sina.com.cn/s/blog_86d9fde701014dm1.html
技术背景:
刚开始学习MySQL时候,有时偷懒,会用SHOW CREATE TABLE 表名\G来复制表创建语句,可是当运行的时候总会因为"表名和列名上有单引号",提示语法错误不能运行。
问题列表:
1,为什么会出错呢?
2,有什么解决方法?
解决问题:
1,分析show create table拷贝的语句出错原因

1.1 重现过程
1.1.1 创建测试表test,并通过show create table test取得表的创建语句,可见表名,列名都用引号包着。
mysql> create table test(
-> id int not null,
-> primary key(id)
-> );
Query OK, 0 rows affected (0.00 sec)
mysql> show create table test \G
*************************** 1. row ***************************
Table: test
Create Table: CREATE TABLE `test` (
`id` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1
1 row in set (0.00 sec)
1.1.2 drop掉test表,再复制刚才的创建语句,执行后,出现预期的语法错误。
mysql> drop table test;
Query OK, 0 rows affected (0.00 sec)
mysql> Create Table: CREATE TABLE `test` (
-> `id` int(11) NOT NULL,
-> PRIMARY KEY (`id`)
-> ) ENGINE=MyISAM DEFAULT CHARSET=latin1
-> ;
ERROR 1064 (42000): 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 ': CREATE

1.2 原理
1.2.1 如果仔细看`test`与单引号的'test'外观上有点区别,那用字符串函ASCII()来验证一下(复制语句中`)。
从下面测试结果可知,`的ASCII码是96, 那查看码表后,才知`是"重音符",不是ASCII为39的单引号。
mysql> select ASCII('`');
+------------+
| ASCII('`') |
+------------+
| 96 |
+------------+
//查看单引号的ASCII码
mysql> select ASCII("'");
+------------+
| ASCII("'") |
+------------+
| 39 |
+------------+
说明:重音符在键盘第二排第一个键,发现的时候,我表示相当尴尬。
2 解决问题
2.1 利用Session设置参数set sql_quote_show_create=0;

2.1.1 sql_quote_show_create,有两个值(1,0),默认是1,表示表名和列名会用``包着的。
这个服务器参数只可以在session级别设置,不支持global设置的(不支持my.cnf设置)。
设置后,可见下面的没有重音符了。
mysql> set sql_quote_show_create=0;
Query OK, 0 rows affected (0.00 sec)
mysql> show create table test \G
*************************** 1. row ***************************
Table: test
Create Table: CREATE TABLE test (
id int(11) NOT NULL,
PRIMARY KEY (id)
) ENGINE=MyISAM DEFAULT CHARSET=latin1
2.2 使用pager来处理输出
mysql> pager tr -d '`'
PAGER set to 'tr -d '`''
mysql> show create table test;
+-------+------------------------------------------------------------------------------------------------------------+
| Table | Create Table |
+-------+------------------------------------------------------------------------------------------------------------+
| test | CREATE TABLE test (
id int(11) NOT NULL,
PRIMARY KEY (id)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 |

3, 命令行的使用:偷懒是一回事,如果在写shell, python等工具的时候,可能会根据show create table来处理一些事情,即“命令行处理”
3.1 用'SET SQL_QUOTE_SHOW_CREATE=0
-bash-3.2$ mysql -uroot -e 'SET SQL_QUOTE_SHOW_CREATE=0; use test; show create table test';
+-------+------------------------------------------------------------------------------------------------------+
| Table | Create Table |
+-------+------------------------------------------------------------------------------------------------------+
| test | CREATE TABLE test (
id int(11) NOT NULL,
PRIMARY KEY (id)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 |
+-------+------------------------------------------------------------------------------------------------------+
3.2
-bash-3.2$ mysql -e 'use test; show create table test \G' | tr -d '`';
*************************** 1. row ***************************
Table: test
Create Table: CREATE TABLE test (
id int(11) NOT NULL,
PRIMARY KEY (id)
) ENGINE=MyISAM DEFAULT CHARSET=latin1
3.3 也可以使用sed来解决
-bash-3.2$ mysql -e 'use test; show create table test \G' | sed -e 's/`//g';
*************************** 1. row ***************************
Table: test
Create Table: CREATE TABLE test (
id int(11) NOT NULL,
PRIMARY KEY (id)
) ENGINE=MyISAM DEFAULT CHARSET=latin1

mysql的sql_quote_show_create与SHOW CREATE TABLE命令介绍相关推荐

  1. MySQL建表(create table)命令详解

    MySQL建表(create table)命令详解 create table命令 强调:使用建表命令之前必须使用use命令选择表所在的数据库.create table命令的格式如下: create t ...

  2. MySQL创建数据表(CREATE TABLE语句)

    在创建数据库之后,接下来就要在数据库中创建数据表.所谓创建数据表,指的是在已经创建的数据库中建立新表. 创建数据表的过程是规定数据列的属性的过程,同时也是实施数据完整性(包括实体完整性.引用完整性和域 ...

  3. 【数据分析师自学系列-MySQL】创建新表create table、create table as、create table like的区别

    [数据分析师自学系列-MySQL]创建新表create table.create table as.create table like的区别 1.create table:基本创建新表方式 格式如下: ...

  4. postgresql 的 show create table 命令

    mysql 的 show create table 非常棒, 下面转载 https://blog.csdn.net/xiaofengtoo/article/details/84395199 CREAT ...

  5. mysql select table_MySQL中的CREATE TABLE……SELECT语句

    在MySQL中,可使用CREATE TALBE. . .SELECT语句将查询结果转存到一个新表中. 创建新表 create table tabname(col1 type1 [not null] [ ...

  6. MySQL错误:Can't create table‘..’ (errno:150)解决方案

    场景 含有学生表s(sno,sname,sage).课程表c(cno,cname) 选课表(sc)创建时,设置(sno,cno)为主键.sno和cno为外键 drop table if exists ...

  7. (笔记)Mysql命令create table:创建数据表

    create table命令用来创建数据表. create table命令格式:create table <表名> (<字段名1> <类型1> [,..<字段 ...

  8. postgres语法_SQL Create Table解释了MySQL和Postgres的语法示例

    postgres语法 A table is a group of data stored in a database. 表是存储在数据库中的一组数据. To create a table in a d ...

  9. mysql 建表语句示例_MySQL Create Table语句和示例

    mysql 建表语句示例 In this article, I am going to explain the MySQL CREATE TABLE statement with examples. ...

最新文章

  1. linux安装R包的安装
  2. 「文末预告,注意查收」告别枯燥的理论,回归技术
  3. poj 3797(状态压缩dp)
  4. CRM Fiori Simulation pipeline应用点了bubble控件的实现
  5. Java子类的成员方法可以直接调用父类的成员方法和成员变量
  6. 板框导入_板框结构导入有问题?这几个问题最常见,附解决方法!
  7. n.html id=198,YPE htmlhtml lang=enhead data-n-head-ssrtitle data-n-=true小程序获取不到unionid 微信开放社区...
  8. 2.mysql优化---增删改优化
  9. python去除图像光照不均匀_低光照环境下图像增强相关
  10. layui表格展示数据时:返回的数据不符合规范,正确的成功状态码应为:code: 0
  11. MySQL的使用笔记
  12. 【ACL2020】CESTa, 将对话中的情感分类任务建模为序列标注任务
  13. protobuf(Protocol Buffers)java初体验
  14. mybatis-plus 自定义UpdateWrapper(一)实现列自增
  15. QT FOR 安卓动态旋转屏幕
  16. python 每天定时运行程序(傻瓜式倒计时)
  17. icom对讲机写频线定义_哈罗CQ火腿社区 - QRP and DIY - 各种写频线的资料,放上来备用吧 - Powered by phpwind...
  18. 《Java并发编程的艺术》一一2.1 volatile的应用
  19. .net core增强工作流组件,基于稳定平台,多项目整合开发
  20. 【互联网那些事】到底什么是互联网思维

热门文章

  1. WINFORM调用百度翻译API
  2. RBF神经网络与BP神经网络的比较
  3. 三相的稳压电源输出电压是多少?有什么优点?
  4. 如何比较视频编码器的性能
  5. 纯JS实现面向对象版贪吃蛇游戏
  6. Linux三剑客命令详解(grep sed awk )
  7. 三大物理引擎:PhysX、Havok和Bullet
  8. android应用内版本更新,Flutter 应用内App版本更新
  9. 热销手机排行榜显示,高端手机市场依然是三星和苹果的天下
  10. python3数据库分类和比较(入门)