Database design 为什么要避免表名中的特殊字符?

Database design 为什么要避免表名中的特殊字符?,database-design,character-encoding,special-characters,naming-conventions,string-literals,Database Design,Character Encoding,Special Characters,Naming Conventions,String Literals,我希望在我的应用程序中基于规范化字符串(想想用作id的json字符串)生成一些特殊的存储表。起初我将此项用作id,但表太大了,以至于即使是合理的查询也要花费不合理的时间 我打算使用这个字符串作为数据库名称的一部分,所以我正在研究如何做到这一点。看起来我可以,但最常见的反应是“和” 我可以更改这个id,这样我就可以避免使用特殊字符,但我真的很想知道为什么这是一个禁忌。我发现很多例子都说不可以,但实际上没有人解释原因。我找到的最接近答案是“” 特别是在数据库几乎完全由代码管理的情况下,有什么好的理由

我希望在我的应用程序中基于规范化字符串(想想用作id的json字符串)生成一些特殊的存储表。起初我将此项用作id,但表太大了,以至于即使是合理的查询也要花费不合理的时间

我打算使用这个字符串作为数据库名称的一部分,所以我正在研究如何做到这一点。看起来我可以,但最常见的反应是“和”

我可以更改这个id,这样我就可以避免使用特殊字符,但我真的很想知道为什么这是一个禁忌。我发现很多例子都说不可以,但实际上没有人解释原因。我找到的最接近答案是“”

特别是在数据库几乎完全由代码管理的情况下,有什么好的理由吗


我知道这有可能是基于观点的,所以我真的想知道一些可以量化的原因。

这个问题有两个基本方面。第一个是我们使用的许多程序在字母表和编码方面的不同约定。第二个是字符序列和用于表示它的字符序列之间的差异

在软件开发中,我们在许多程序之间运行输入和输出。它们以各种不同的方式(在输入、处理和输出中)处理字符序列(一些表示字符串,包括符号名或数据值)。除了在非常有限的情况下,其中许多都不能保证有效。因此,如果你想最小化问题,你应该使用最简单的字母和编码字符序列,包括那些代表名字和字符串的字符序列


每当表示字符串的字符序列与字符串不同时,我们必须在这两种序列之间进行转换。最简单的情况是序列相同时。下一个最简单的情况是,我们可以在不能包含它的字符串周围放置一些特殊字符。但除此之外,转换需要调用一个程序。例如,在SQL中,我们可以输入一个不带引号的表名作为其字符。对于仅包含字母数字和下划线的SQL VARCHAR类型的值序列,我们可以在其周围加引号。但是对于这样一个也可以包含引号的VARCHAR,我们还必须复制其中的任何引号。对于具有任意字符的VARCHAR,我们必须引入转义字符,包括转义字符。正如我所说,SQL非引号表名约定避免了这些转换问题。

字符串上没有索引作为ID吗?是的,我有。此字符串实际上是用于索引表的4个键中的1个。
create table