MySQL运维实战(4.7) SQL_MODE之ANSI_QUOTES

俊达2年前技术文章1867

默认情况下,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.2)ProxySQL安装和配置

proxysql安装proxysql提供了各个linux发行版的安装包,我们可以使用操作系统的包管理系统来安装proxysql。这里我们以CentOS 7为例:1、从github下载安装包根据OS版本...

MySQL运维实战(2.2)忘记密码如何处理

如果忘记了一个普通用户的密码,可以使用管理员账号登录,修改其他用户的密码。但是如果所有管理员账号的密码都忘记了,应该怎么处理呢?如果忘记root密码,可以使用skip-grant-tables参数启动...

MySQL运维实战之备份和恢复(8.2)xtrabackup备份到云端(OSS)

xtrabackup工具中有一个xbcloud程序,可以将数据库直接备份到S3对象存储中,本地不落盘。这里介绍将数据库直接备份到OSS的一种方法。具体方法如下:1、准备OSS我们使用ossutil工具...

MySQL运维实战(4.9) SQL_MODE之NO_UNSIGNED_SUBTRACTION

在mysql数据库中,unsigned表示不存负数,如果unsigned类型的字段作运算,得到的结果为负数,SQL会报错。mysql> create table t...

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

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

MySQL运维实战(2)MySQL用户和权限管理

MySQL用户管理基本命令创建用户使用create user命令创建用户create user 'username'@'host' ide...

发表评论    

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