使用句点符号伪造MySQL数据库“命名空间”是否安全?

时间:2012-01-30 10:55:32

标签: mysql sql

我想把我的****加载的MySQL表组织成更小的部分,或者命名空间。因此,我想用名称空间前缀命名我的表。我不想使用下划线,因为我已经将它们用于多字表名。是否可以使用句号,或者具有特殊含义?

实施例

CREATE TABLE `map.meta_data.updates` (...

3 个答案:

答案 0 :(得分:5)

如果您的表名已被识别,您可以在其上使用句号。

  

不带引号的标识符中允许的字符:

ASCII: [0-9,a-z,A-Z$_] (basic Latin letters, digits 0-9, dollar, underscore)

Extended: U+0080 .. U+FFFF
     

带引号的标识符中允许的字符包括完整的Unicode   基本多语言平面(BMP),U + 0000除外:

ASCII: U+0001 .. U+007F

Extended: U+0080 .. U+FFFF

参考:http://dev.mysql.com/doc/refman/5.5/en/identifiers.html#id807853


我个人更喜欢并建议只使用非引号标识符中允许的字符!

答案 1 :(得分:4)

这是可能的如果你准备确保每个标识符都由后面的标记分隔

就个人而言,我不会这样做。我会使用$(如果必须的话),这是正常的without delimiters

答案 2 :(得分:2)

取决于您的安全意味着什么。这对mysql来说没有问题,你可能会发现它只会让人感到困惑 - 特别是如果你不是唯一一个使用db的人。

E.g。

select * from `map.meta_data.updates` where `table` = 'bar';

在(深夜,哦,不,有些问题,必须修复)一瞥 - 是地图db,meta_data表更新字段和拼写错误?

为什么不选择一个对mysql没有意义的字符 - 如果你想避免转义,那就是$ - 如果你很乐意逃避的话,那就不是一段时间。