什么规则适用于命名 mysql 列?
Posted
技术标签:
【中文标题】什么规则适用于命名 mysql 列?【英文标题】:What rules apply to naming a mysql column? 【发布时间】:2014-10-17 23:26:12 【问题描述】:在 mysql 表中,命名列,我可以使用
空格 大写字母 UTF8 字符我还应该遵守哪些其他规则?
(MySQL5)
【问题讨论】:
让生活更轻松不要使用空格不要使用上下的混合器最好使用小写,最好使用简单的普通英语 【参考方案1】:是的,是的,是的。
我喜欢在字段名之间加下划线且不使用大写,但我不想引发一场激烈的战争。
另一个不在列名中使用特殊字符的好理由是您,或者其他人最终将不得不在您的应用程序中一遍又一遍地键入它。我会坚持使用标准英文字母表。
好的列名:
account_id
user_id
first_name
错误的列名:
Ȩ̬̩̾͛ͪ̈́̀́͘ ̶̧̨̱̹̭̯ͧ̾ͬC̷̙̲̝͖ͭ̏ͥͮ͟Oͮ͏̮̪̝͍M̲̖͊̒ͪͩͬ̚̚͜Ȇ̴̟̟͙̞ͩ͌͝
uraniumType☢☢☢☢
【讨论】:
【参考方案2】:权威来源http://dev.mysql.com/doc/refman/5.0/en/identifiers.html
我知道一个事实......
您可以使用大写字母 您可以有空格,但:不是 100% 确定 UTF-8 字符,但上面的网站确实说“数据库、表和列名不能以空格字符结尾。”
标识符使用 Unicode (UTF-8) 存储。这适用于存储在 .frm 文件中的表定义中的标识符以及存储在 mysql 数据库的授权表中的标识符。授权表中标识符字符串列的大小以字符为单位。您可以使用多字节字符而不减少存储在这些列中的值所允许的字符数,这在 MySQL 4.1 之前是不正确的。如前所述,允许的 Unicode 字符是基本多语言平面 (BMP) 中的字符。不允许使用补充字符。
【讨论】:
我删除了我的反对票,因为你修改了你对空格的立场:)【参考方案3】:来自https://dev.mysql.com/doc/refman/8.0/en/identifiers.html的mysql 8.0参考手册:
“标识符在内部转换为 Unicode。它们可能包含以下字符:
不带引号的标识符中允许的字符:
ASCII:[0-9,a-z,A-Z$_](基本拉丁字母,数字 0-9,美元,下划线)
扩展:U+0080 .. U+FFFF
带引号的标识符中允许的字符包括完整的 Unicode 基本多语言平面 (BMP),但 U+0000 除外:
ASCII:U+0001 .. U+007F
扩展:U+0080 .. U+FFFF
ASCII NUL (U+0000) 和补充字符(U+10000 及更高)不允许出现在带引号或不带引号的标识符中。
标识符可以以数字开头,但除非被引用,否则标识符可能不完全由数字组成。
数据库、表和列名不能以空格字符结尾。"
从此允许字符列表中挑选出的规则: (1) ASCII:[0-9,a-z,A-Z$_](基本拉丁字母,数字0-9,美元,下划线) (2) 完整的 Unicode 基本多语言平面 (BMP) 除了 U+0000 (3) 标识符可以以数字开头,但除非引用,否则标识符可能不仅仅由数字组成。 (4) 数据库、表、列名不能以空格字符结尾。
解释: 回复:ASCII:参见***关于 ASCII 的文章 (https://en.wikipedia.org/wiki/ASCII#/media/File:USASCII_code_chart.png) 中的 ASCII 字符图表显示 0000(空字符)和 007F(删除字符)之间是整个 ASCII 图表,这意味着所有 15 列 x 7 行都可以合法使用列名,这显然与仅允许标点符号为“$”和“_”的规则相矛盾。例如,“#”位于 _4(x 轴)2(y 轴)并具有标识符“0023”/“35”。但是“#”似乎被 ascii 规则排除在外(它是标点符号,不是美元或下划线),所以不清楚 ASCII 列是否可以包含“#”。 (顺便说一句,许多 ASCII 图表的标签不同,您无法找到与任何“ _ _ _”数字索引的相关性,因此如果找不到接近“0000”格式的任何内容,请查找表索引的变化。) p>
Re:UNICODE BMP:由 U+_ _ _ _ 索引,因此规则更易于实施。例如,“#”在完整的 BMP 中显示为 U+0023,因此应该可以使用(U+000 是“null”字符,顺便说一句)。
因此,列名允许使用的特殊字符似乎也因数据库中的排序规则而异; UTF 排序规则为列名中使用的特殊字符提供了更多选项,这是在数据库中首选 utf 排序规则的另一个原因,此外它还能够包含更多国际字符,这在构建具有国际成员资格的网站时更有价值。
【讨论】:
以上是关于什么规则适用于命名 mysql 列?的主要内容,如果未能解决你的问题,请参考以下文章