27

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

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

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

4

6 回答 6

48

将名称括在“反引号”中

于 2009-05-19T23:20:31.370 回答
7

列名中是否有连字符 (-) 或下划线 (_)?

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

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

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

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

于 2009-05-19T23:45:42.253 回答
3

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

`name-with-hyphen`
于 2014-06-18T01:56:21.500 回答
3

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

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

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

于 2017-03-21T22:50:10.047 回答
1

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

我解决了这个问题

create database `pre-ca_db`;

祝你好运!

于 2015-06-25T17:05:19.063 回答
0

MySQL 论坛上的这个条目表明您可能有问题。但是,我认为它指的是数据而不是列名。

就是说“不要这样做”。不知道权威性如何。

于 2009-05-19T23:23:15.917 回答