Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在SQL标识符中使用特殊字符的优缺点是什么?_Sql_Special Characters - Fatal编程技术网

在SQL标识符中使用特殊字符的优缺点是什么?

在SQL标识符中使用特殊字符的优缺点是什么?,sql,special-characters,Sql,Special Characters,我应该避免在SQL表名和列名中使用像“éáç”这样的特殊字符吗 使用特殊字符的利与弊是什么?正如你所猜测的,有利也有弊。这或多或少是一个主观问题 SQL(与大多数编程语言不同)允许您在表或列标识符中使用特殊字符、空格、标点符号或保留字 人们可以选择使用适合自己母语的字符,这真是太好了 尤其是当一个单词用最接近的ASCII字符拼写时,其含义会发生显著变化的情况:例如,añovs.ano 但缺点是,如果这样做,则每次使用特殊字符引用表时都必须使用“分隔标识符”。在标准SQL中,分隔标识符使用双引号

我应该避免在SQL表名和列名中使用像“éáç”这样的特殊字符吗


使用特殊字符的利与弊是什么?

正如你所猜测的,有利也有弊。这或多或少是一个主观问题

SQL(与大多数编程语言不同)允许您在表或列标识符中使用特殊字符、空格、标点符号或保留字

人们可以选择使用适合自己母语的字符,这真是太好了

尤其是当一个单词用最接近的ASCII字符拼写时,其含义会发生显著变化的情况:例如,
año
vs.
ano

但缺点是,如果这样做,则每次使用特殊字符引用表时都必须使用“分隔标识符”。在标准SQL中,分隔标识符使用双引号

SELECT * FROM "SELECT"
这其实没关系!如果要使用SQL保留字作为表名,可以这样做。但这可能会给一些代码读者带来一些困惑

同样,如果使用特殊的非ASCII字符,可能会使讲英语的程序员很难维护代码,因为他们不熟悉键入这些特殊字符的键序列。或者他们可能忘记了必须对表名进行分隔

SELECT * FROM "año"
然后是非标准分隔标识符。默认情况下,Microsoft使用方括号:

SELECT * FROM [año]
SELECT * FROM `año`
默认情况下,MySQL使用反勾号:

SELECT * FROM [año]
SELECT * FROM `año`
虽然如果启用某些选项,两者都可以使用标准双引号作为标识符分隔符,但不能始终依赖于此,如果禁用该选项,代码将停止工作。因此,不幸的是,微软和MySQL的用户在使用非标准分隔符时陷入了困境


如果您可以坚持使用ASCII字符,那么在某些方面维护代码会更简单。但是也有合理的理由想使用特殊字符。

您是说在表名中?是的,坚持使用ASCII。并且不区分大小写。还是在数据中?当然,你可以在那里放置你想要的任何字符。确保将数据库和客户端配置为Unicode支持。@Thilo感谢您的帮助(在表名中)。投票以基于意见的方式结束,因为您可以使用特殊字符,而OP会询问您是否应该这样做。一个更好的问题可能是询问每个问题的利弊。@DStanley我希望人们能提出改进问题的建设性建议,而不仅仅是投票结束所有问题。