MySQL表的多行注释

3
在MySQL中创建表时,我们可以指定一个注释。
有人知道如何让传递给`COMMENT=`的字符串跨多行吗?
我尝试使用一个本地变量作为CONCAT的结果,也尝试使用字符串字面量语法,比如'foo''bar''baz'。
例如:
CREATE TABLE foo (
    id INT NOT NULL AUTO_INCREMENT,
    PRIMARY KEY (id)
) COMMENT = 'some really long string that we want to span multiple lines instead of being limited to a single line';
3个回答

4
为了补充@BillKarwin的答案:如果您想使用多行创建注释,只需这样做:
CREATE TABLE foo
(
    foo_id int primary key auto_increment,
    foo_name varchar(255)
)
COMMENT = 'this is a 
multi-line comment'

很遗憾,在注释结构中,您无法进行任何类型的连接操作(将实际DDL分割成多行,同时不在实际DDL中换行)。例如,下面的写法是不可行的:

CREATE TABLE foo(foo_id INT PRIMARY KEY AUTO_INCREMENT) 
COMMENT = CONCAT('multi-line', 
    ' comment'

当然,如果你是通过客户端语言(如PHP或Python)访问MySQL,则可以按照自己的方式构建字符串:
ddl = (     "CREATE TABLE `foo` "
            "(`foo_id` INT PRIMARY KEY AUTO_INCREMENT) "
            "COMMENT='This is a multi-line "
            "coment")

这样有所改善,但我宁愿在表格注释中不要有换行符。 - BrushyAmoeba
@BrushyAmoeba:在你的脚本中,似乎不能在没有新行定义的情况下使用多行注释。我更新了我的答案,指出你可以在与MySQL通信的其他客户端中实现这一点... - Zack
啊,谢谢,这是个好主意。我可以写一个Python脚本作为我的SQL的一层,而我真正失去的只是语法高亮。 - BrushyAmoeba

1
如果你想嵌入一个新行,请使用\n
CREATE TABLE `foo` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='some really long string\nthat we want to span multiple lines\ninstead of being limited to a single line'

如果使用 SHOW CREATE TABLE 查看,评论仍将显示为一个长字符串。该语句返回的是重建表所需的确切语法,因此如果需要使用 \n 来换行,它就会显示出来。
但是,如果从 INFORMATION_SCHEMA 查询表元数据,则可以将换行符作为实际的换行输出:
mysql> select * from information_schema.tables where table_name='foo'\G
*************************** 1. row ***************************
  TABLE_CATALOG: def
   TABLE_SCHEMA: test
     TABLE_NAME: foo
     TABLE_TYPE: BASE TABLE
         ENGINE: InnoDB
        VERSION: 10
     ROW_FORMAT: Compact
     TABLE_ROWS: 0
 AVG_ROW_LENGTH: 0
    DATA_LENGTH: 16384
MAX_DATA_LENGTH: 0
   INDEX_LENGTH: 0
      DATA_FREE: 0
 AUTO_INCREMENT: 1
    CREATE_TIME: 2018-10-02 23:37:57
    UPDATE_TIME: NULL
     CHECK_TIME: NULL
TABLE_COLLATION: utf8mb4_general_ci
       CHECKSUM: NULL
 CREATE_OPTIONS: 
  TABLE_COMMENT: some really long string
that we want to span multiple lines
instead of being limited to a single line

我不想在注释中有换行符,但我希望字符串本身能够跨越脚本中的多行,而不是在实际注释中有换行符。 - BrushyAmoeba
1
这听起来像是您的文本编辑器中的换行问题,而不是MySQL的问题。 - Bill Karwin

1

简单的线条可以像这样:

import mysql.connector

mydb = mysql.connector.connect(
    host="localhost",
    user="user",
    password="pwd",
    database="dbname"
)

mycursor = mydb.cursor()
table_string_construct = """
    CREATE TABLE foo (
        company VARCHAR (255),
        col2 VARCHAR (255),
        col3 VARCHAR (255)
        )
    """
mycursor.execute(table_string_construct)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接