在MySQL表中,命名列,我可以使用
我还应遵循哪些其他规则?
(MySQL5)
答案 0 :(得分:9)
是,是,是的。
我喜欢字段名称之间的下划线而不是大写字母,但我不想发起火焰战争。
不在列名中使用特殊字符的另一个好理由是,或者其他人最终必须在您的应用程序中反复输入。我坚持使用标准的英文字母。
好的专栏名称:
account_id
user_id
first_name
错误的列名:
Ȩ̬̩̾͛ͪ̈́̀́͘ ̶̧̨̱̹̭̯ͧ̾ͬC̷̙̲̝͖ͭ̏ͥͮ͟Oͮ͏̮̪̝͍M̲̖͊̒ͪͩͬ̚̚͜Ȇ̴̟̟͙̞ͩ͌͝
uraniumType☢☢☢☢
答案 1 :(得分:2)
权威来源是http://dev.mysql.com/doc/refman/5.0/en/identifiers.html
我知道一个事实......
"数据库,表格和列名称不能以空格字符结尾。"
使用Unicode(UTF-8)存储标识符。这适用于存储在.frm文件中的表定义中的标识符以及存储在mysql数据库的授权表中的标识符。授权表中标识符字符串列的大小以字符为单位。您可以使用多字节字符,而不会减少存储在这些列中的值所允许的字符数,这在MySQL 4.1之前是不正确的。如前所述,允许的Unicode字符是基本多语言平面(BMP)中的字符。不允许使用补充字符。
答案 2 :(得分:1)
摘自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:请参见widipedia上有关ASCII(https://en.wikipedia.org/wiki/ASCII#/media/File:USASCII_code_chart.png)的ASCII字符表,其中显示整个ASCII图表在0000(空字符)和007F(删除字符)之间,这意味着所有15列x 7行对在列名中使用,这显然与仅允许标点符号为“ $”和“ _”的规则相矛盾。例如,“#”位于_4(x轴) 2(y轴)处,并具有标识符“ 0023” /“ 35”。但是“#”似乎仍然被ascii规则排除(标点不是美元或下划线),因此尚不清楚ASCII列是否可以包含“#”。 (顺便说一下,许多ASCII图表的标签使用不同的标签,您无法找到与任何“ _ _ _”数字索引的相关性,因此,如果找不到任何接近“ 0000”格式的内容,请查找表索引中的变化形式。)>
关于:UNICODE BMP:由U + _ _ _ _索引,因此规则更易于实现。例如,“#”在完整的BMP中显示为U + 0023,因此可以使用(U + 000是“空”字符,BTW)。
因此,似乎列名允许使用的特殊字符根据数据库中的排序规则而有所不同; UTF归类为在列名中使用特殊字符提供了更多选项,这是在数据库中更喜欢utf归类的另一个原因,除了它能够包含更多国际字符之外,这在构建具有国际成员资格的网站时更有价值。