在MySQL表中,可以使用
来命名列吗?- 大写字母
- UTF8字符
我还应该遵守哪些规则?
(MySQL5)
Yes, Yes, and Yes.
我喜欢在字段名之间加下划线,不要大写,但我不想引起一场口水仗。
不要在列名中使用特殊字符的另一个很好的理由是,您或其他人最终将不得不在您的应用程序中反复键入特殊字符。我会坚持使用标准的英文字母。
好列名:
account_id
user_id
first_name
错误的列名:
Ȩ̬̩̾͛ͪ̈́̀́͘ ̶̧̨̱̹̭̯ͧ̾ͬC̷̙̲̝͖ͭ̏ͥͮ͟Oͮ͏̮̪̝͍M̲̖͊̒ͪͩͬ̚̚͜Ȇ̴̟̟͙̞ͩ͌͝
uraniumType☢☢☢☢
权威来源:http://dev.mysql.com/doc/refman/5.0/en/identifiers.html
我知道…
- 可以使用大写字母
- 可以有空格,但是:
"数据库、表和列名不能以空格字符结尾。"
标识符使用Unicode (UTF-8)存储。这适用于存储在.frm文件中的表定义中的标识符,以及存储在mysql数据库的授权表中的标识符。授权表中标识符字符串列的大小以字符为单位测量。您可以使用多字节字符,而不会减少存储在这些列中的值所允许的字符数量,这在MySQL 4.1之前是不成立的。如前所述,允许的Unicode字符是基本多语言平面(Basic Multilingual Plane, BMP)中的字符。不允许使用补充字符。
来自mysql 8.0参考手册https://dev.mysql.com/doc/refman/8.0/en/identifiers.html:
"标识符在内部被转换为Unicode。它们可以包含以下字符:
未加引号的标识符中允许的字符:
ASCII: [0-9,a-z, a-z $_](基本拉丁字母,数字0-9,美元,下划线)
扩展:U+0080 ..U +飞行符
带引号的标识符中允许的字符包括完整的Unicode基本多语言平面(BMP),除了U+0000:
ASCII: U+0001 ..U + 007 f
扩展:U+0080 ..U +飞行符
ASCII NUL (U+0000)和补充字符(U+10000及以上)不允许在带引号或不带引号的标识符中使用。
标识符可以以数字开头,但除非加上引号,否则不能完全由数字组成。
数据库、表和列名不能以空格字符结尾。"
从允许字符列表中剔除的规则:(1) ASCII码:[0-9,a-z, a-z $_](基本拉丁字母,数字0-9,美元,下划线)(2)除U+0000外的全Unicode基本多语言平面(BMP)(3)标识符可以以数字开头,但除非加上引号,否则不能完全由数字组成。(4)数据库名、表名、列名不能以空格结尾
解释:Re: ASCII:参见维基百科文章中关于ASCII的ASCII字符图(https://en.wikipedia.org/wiki/ASCII#/media/File:USASCII_code_chart.png)显示,在0000(空字符)和007F(删除字符)之间是整个ASCII图,这意味着所有15个颜色x 7行都可以合法地用于列名,这显然与只允许标点符号是"$"one_answers"_"的规则相矛盾。例如,"#"位于_4 (x轴)2 (y轴),标识符为"0023"/"35"。但是"#"似乎被ascii规则排除在外(它是标点符号,不是美元或下划线),所以不清楚ascii列是否可以包含"#"。(顺便说一句,许多ASCII图表的标签不同,你找不到任何" _ _ _ _"数字索引的相关性,所以如果你找不到任何接近'0000'格式的东西,请寻找表索引的变化。)
Re: UNICODE BMP:由U+_ _ _ _索引,因此规则更容易实现。例如,"#"在完整的BMP中显示为U+0023,所以使用它应该是可以的(顺便说一句,U+000是"null"字符)。
因此,根据数据库中的排序规则,列名所允许的特殊字符似乎也有所不同;UTF排序法为列名中使用的特殊字符提供了更多的选择,这是在数据库中首选UTF排序法的另一个原因,除了它能够包含更多的国际字符之外,这在构建具有国际会员资格的网站时更有价值。