MySQL 数据库中列名中的连字符

Posted

技术标签:

【中文标题】MySQL 数据库中列名中的连字符【英文标题】:Hyphens in column names in MySQL DB 【发布时间】:2010-10-27 11:54:03 【问题描述】:

可能这个问题之前已经回答过,但我找不到。

我正在使用一个 2/3 年前的 mysql 数据库,它的列名中有连字符。当我尝试从我的 Java 代码中使用这些名称时,这些名称在连字符处被破坏(例如 air_port 变为 air),因此找不到。我尝试在我的代码中将连字符替换为下划线,希望数据库可以平等对待它们,但这不起作用。

如何转义连字符或如何访问这些列?这可能是正在使用的字符集的问题吗?

【问题讨论】:

【参考方案1】:

将名称括在 `back-ticks` 中

【讨论】:

酷,在 SQL Server 中也可以使用 Hibernate。【参考方案2】:

This entry 在 MySQL 论坛上建议您可能有问题。但是,我认为它指的是数据而不是列名。

This 说“不要这样做”。不知道有多权威。

【讨论】:

【参考方案3】:

您的列名中是否包含连字符 (-) 或下划线 (_)?

连字符是个大问题,因为如果您最终将列名映射到变量,大多数语言都不喜欢在变量名中使用连字符。也许您使用的 Java 库之一会自动生成名称基于列名的变量或对象。

根据您的问题的性质,您可以使用几种不同的方法:

    使用 ALTER TABLE 重命名所有列。请注意,这可能会影响引用完整性或其他依赖于数据库的应用程序。如果您不知道这意味着什么,请不要这样做。 创建的 SQL 视图可以简单地重述您需要的表,但使用“更好”的列名。这不是很有效,但它会让你得到你想要的。 在运行 SELECT 语句以重命名查询中的列时使用 AS 关键字。

这些都不是很好的解决方案,但它们应该可以帮助您入门。祝你好运!

【讨论】:

【参考方案4】:

数据库名称中的连字符也不好。但是您可以将它们与反引号技巧一起使用 `

`name-with-hyphen`

【讨论】:

【参考方案5】:

我必须创建一个名为 pre-ca_db 的数据库。

我解决了这个问题

create database `pre-ca_db`;

祝你好运!

【讨论】:

这如何解决现有数据库/表在列名中带有连字符的问题?【参考方案6】:

最好不要在列名中使用连字符。我在 JOIN 语句中遇到了一个大问题,连字符造成了很大的麻烦 - 甚至在反引号中转义名称也不起作用。

将列名转换为使用下划线 - 这是最安全的方法。

作为替代方案 - 如果甚至反引号也会导致问题(你知道它发生在我身上)并且无论如何你都想坚持使用连字符 - 只需创建一个 VIEW 以反映包含所有字段的同一个表和query the view 而不是原来的表格。

【讨论】:

以上是关于MySQL 数据库中列名中的连字符的主要内容,如果未能解决你的问题,请参考以下文章

MYSQL中使用sql函数怎样截取字符串

如果 mySQL 中的表中存在列名/字段名,则搜索数据库

SQL 修改表中的列名(急~~~)

将列名更改为 MySQL 表中的第一行

mysql存储过程,查询指定数据库具体编码类型含有某字符串的所有表名和列名

如何将 MySql 列名转换为小写以提高可读性?