MySQL运维实战(4.7) SQL_MODE之ANSI_QUOTES

俊达1年前技术文章560

默认情况下,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运维实战(4.5) SQL_MODE之NO_ZERO_DATE和NO_ZERO_IN_DATE

NO_ZERO_DATE:日期中不允许'0000-00-00'NO_ZERO_IN_DATE:日期中年、月或日不允许为0,如不允许'2021-00-01', '...

MySQL运维实战(4.6) SQL_MODE之NO_BACKSLASH_ESCAPES

设置NO_BACKSLASH_ESCAPES后,反斜杠(\)不作为转义符。不设置NO_BACKSLASH_ESCAPES时,反斜杠(\)用来转义后一个字符mysql> create&n...

MySQL运维实战(4.8) SQL_MODE之NO_ENGINE_SUBSTITUTION

开启NO_ENGINE_SUBSTITUTION,建表时如果指定的存储引擎不可用或不存在,SQL报错。否则会使用默认的存储引擎替换。如果不设置NO_ENGINE_SUBSTITUTION,建表时指定的...

MySQL运维实战(4.3) SQL_MODE之ONLY_FULL_GROUP_BY

设置ONLY_FULL_GROUP_BY后,对有group by子句SQL,select的字段要么是group by中的字段,要么对字段进行聚合运算,否则sql执行报错。不设置ONLY_FULL_GR...

MySQL运维实战(4.2) 关于SQL_MODE

早期mysql对一些不符合SQL标准的SQL语句和数据的容忍度比较高。mysql 5.7 修改了默认sql mode。系统从低版本升级或迁移到高版本时,需要经过全面的测试,避免影响程序的正常运行。5....

MySQL运维实战(4.9) SQL_MODE之NO_UNSIGNED_SUBTRACTION

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

发表评论    

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