MySQL运维实战(4.7) SQL_MODE之ANSI_QUOTES

俊达2年前技术文章1367

默认情况下,mysql使用反引号(`)作为标识符的引号。使用mysql关键字作为表名、字段名会报语法错误,这时可以加上反引号( `),避免报错。

设置ANSI_QUOTES后,使用双引号(")作为标识符的引号。


不设置ANSI_QUOTES时,mysql可以使用双引号来引用字符串常量。而设置ANSI_QUOTES后,双引号内的内容不再是字符串,而是mysql的标识符(如表名、字段名)



mysql> set sql_mode = '';
Query OK, 0 rows affected (0.00 sec)

-- order是关键字,不能作为表名
mysql> create table order(a varchar(100));
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 'order(a int)' at line 1

mysql> create table "order"(a varchar(100));
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 '"order"(a int)' at line 1

-- 使用反引号(``),
mysql> create table `order`(a varchar(100));
Query OK, 0 rows affected (0.02 sec)

mysql> insert into `order` values("abc");
Query OK, 1 row affected (0.00 sec)

mysql> select * from `order`;
+------+
| a    |
+------+
| abc  |
、+------+
1 rows in set (0.00 sec)



设置ANSI_QUOTES

mysql> drop table `order`;
Query OK, 0 rows affected (0.00 sec)

-- "设置ANSI_QUOTES
mysql> set sql_mode='ANSI_QUOTES';
Query OK, 0 rows affected (0.00 sec)


-- 使用双引号
mysql> create table "order"(a varchar(100));
Query OK, 0 rows affected (0.02 sec)

-- "abc" 不是合法的字符串表达式, 而是字段abc
mysql> insert into "order" values ( "abc");
ERROR 1054 (42S22): Unknown column 'abc' in 'field list'

-- 这里插入的"a"不是字符串a,而是字段a
mysql> insert into "order" values ( "a");
Query OK, 1 row affected (0.01 sec)

mysql> select * from "order";
+------+
| a    |
+------+
| NULL |
+------+






相关文章

MySQL运维实战之ProxySQL(9.5)proxysql和MySQL Group Replication配合使用

如果后端MySQL使用了Group Replication,可通过配置mysql_group_replication_hostgroups表来实现高可用mysql_group_replication_...

MySQL运维实战(5.5) 数据导入导出时的字符集问题

mysql可以使用load data/select into outfile或mysqldump工具进行数据导入导出。下面分别分析数据导入导出时的字符集相关问题。准备测试数据创建测试表,2个字段分别使...

MySQL运维实战(3.3) 管理数据库(database)

数据库使用create database语句创建数据库。创建数据库的账号需要有create权限。创建数据库用户拥有create权限才能创建数据库。-- 例子:创建dba用户,拥有创建数据库名...

MySQL优化器特性(六)表扫描成本计算

全表扫描成本使用optimizer_trace,或者使用explain format=tree, 或者explain format=json,可以查看查询的costmysql> exp...

MySQL运维实战之Clone插件(10.2)Clone插件原理

MySQL运维实战之Clone插件(10.2)Clone插件原理

clone插件实现clone操作主要分为几个阶段:1、初始阶段。初始阶段,会开启页面跟踪(Page Tracking)。开启页面跟踪后,修改过的页面的编号会被记录下来。页面的修改可分为两个阶段:首先在...

MySQL运维实战(4.1) MySQL表存储引擎

MySQL表的特点和其他数据库如Oracle、SQL Server相比,mysql有一些特点:MySQL使用插件式存储引擎,同一个数据库中的表可以使用不同的存储引擎。存储引擎决定了表的物理存储格式。表...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。