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 数据库中列名中的连字符的主要内容,如果未能解决你的问题,请参考以下文章