暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

comment 写入 'Y','N' 问题

00后DBA实录 2025-02-25
46

前言

加一个 Error handling
 的专栏,写一点遇到的错误,简单复现加处理方法。

有个需求,在表的 coment
 里面写入类似 'Y','N'
 的内容,正常写入报错。

测试

正常写入会报错

root@localhost [ddl] 13:23:39 > create table comment_error(
    -> id int primary key,
    -> name varchar(64)
    -> )comment ''Y','N'';
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 'Y','N''' at line 4

但是我们在外层使用双引号就好了

root@localhost [ddl] 13:23:53 > create table comment_error(
    -> id int primary key,
    -> name varchar(64)
    -> )comment "'Y','N'";
Query OK, 0 rows affected (0.32 sec)

root@localhost [ddl] 13:27:03 > show create table comment_error;
+---------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table         | Create Table                                                                                                                                                                                         |
+---------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| comment_error | CREATE TABLE `comment_error` (
  `id` int NOT NULL,
  `name` varchar(64DEFAULT NULL,
  PRIMARY KEY (`id`)
ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='''Y'',''N''' |
+---------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.02 sec)

或则加倍单引号。

root@localhost [ddl] 13:27:57 > create table comment_error2(
    -> id int primary key,
    -> name varchar(64)
    -> )comment '''Y'',''N''';
Query OK, 0 rows affected (0.10 sec)

root@localhost [ddl] 13:29:28 > show create table comment_error2;
+----------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table          | Create Table                                                                                                                                                                                          |
+----------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| comment_error2 | CREATE TABLE `comment_error2` (
  `id` int NOT NULL,
  `name` varchar(64DEFAULT NULL,
  PRIMARY KEY (`id`)
ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='''Y'',''N''' |
+----------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.01 sec)

这是 mysql 的表名命名规则那一章里面的,具体忘了。

我们可以看到 show
 出来的 comment
 是这样的:

COMMENT='''Y'',''N'''

这是正确的吗?我们查一下元数据

root@localhost [ddl] 13:34:56 > select TABLE_SCHEMA,TABLE_NAME,TABLE_COMMENT from information_schema.tables where TABLE_SCHEMA='ddl' and TABLE_NAME like 'comment_error%';
+--------------+----------------+---------------+
| TABLE_SCHEMA | TABLE_NAME     | TABLE_COMMENT |
+--------------+----------------+---------------+
| ddl          | comment_error  | 'Y','N'       |
| ddl          | comment_error2 | 'Y','N'       |
+--------------+----------------+---------------+
2 rows in set (0.01 sec)

可以看到 'Y','N'
 元数据存储的是正确的,只是 show
 出来的时候字面值的引号也加倍了。


文章转载自00后DBA实录,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论