mysql 设置大小写

MySQL 需要解决区分大小写的问题。
有两种情况。
这就是您如何设置服务器以及如何标准化数据库表的名称。

1 .如何全局配置服务器
有两个重要参数:lower_case_table_names和sql_mode。

1 .小写表名 该参数控制数据库和表名称是否区分大小写。

如果设置为 0,则区分大小写。
这是 Linux/Unix 系统上的默认设置。
首次安装 MySQL 时必须更改。
如果不更改它,您可能会在启动过程中遇到问题。
如果设置为 1 ,则忽略大小写。
这是 Windows 系统上的默认设置。
所有名称均以小写形式存储,并在搜索时自动转换。
如果设置为 2 ,则数据库名称不不同,但表名称不同。
这种情况并不常用,并且会带来兼容性风险。

注意:更改此参数需要重新启动 MySQL 服务。
Linux/Unix 系统只能在安装开始时更改。
如果不更改,则需要重做数据目录。

2 SQL模式 该参数控制SQL语句是否严格且区分大小写。

设置为 STRICT_TRANS_TABLES:MySQL 使 SQL 关键字(SELECT、FROM 等)和函数名称区分大小写。
如果设置为 ANSI 或 null,则忽略大小写。

建议您可以将您的开发环境设置为非严格模式以获得更好的兼容性。
您的生产环境将根据您的业务需求的配置方式而有所不同。

2 数据库表命名规则
为避免大小写错误,应遵循以下规则:
1 .请全部使用小写字母 数据库和表名称使用小写字母,例如 user_data 而不是 UserData。
这样,在 Linux 和 Windows 系统上就不太可能出现问题。

2 用下划线分隔单词 例如,order_details 不应用作 orderDetails。
这样您就可以清楚地看到它并避免维护问题。

3 名字简洁、独特 避免使用 SQL 保留字(顺序、组等)。
我们建议添加前缀,例如 app_user,以便您知道它是哪个应用程序表。

说实话,这个问题应该结合服务器参数和命名约定来考虑。
参数直接影响存储和检索,是防止人为错误的命名约定。
在平台或版本之间升级时,请注意参数是否发生变化。
例如,请注意 MySQL 8 .0 的默认 sql_mode 可能是 STRICT_TRANS_TABLES。

怎样设计数据库之命名规范

等等,我昨天在咖啡馆发生了什么事。
一位程序员对着电脑挠头说,新添加的表名总是太长,所有的名字都乱七八糟。
我只是想,如果我们能先使用标准化命名就好了。

表的命名规则应该从一开始就设定好。
例如,VNET 用户表名为 T_VNET_USER。
如果有用户ID、用户名、用户邮箱等多个字段,则写为user_id、username、user_email。
如果表名也很长,例如T_VNET_USER_ADDRESS,则地址表字段可以变为user_id_address、address_line1 和address_city。
这样看的话,其他人看代码就知道是哪个系统的哪个表、哪个字段了。

字段命名应该更加诚实。
上次我检查日志时,我看到一个名为 user_create_time_time 的字段。
我当时就愣住了——这是哪块地?后来我意识到这是创建时间的时间戳。
如果每个时间字段都使用_time后缀,如order_create_time、 payment_time,搜索会更直观。
在code字段中添加_id也很实用,比如user_id、order_id,一眼就能看出是主键还是外键。

即使在命名你的想法时也不要含糊其辞。
当我上次重建系统时,我发现了一个视图V_USER_ORDER_ITEM,它由三个表连接:User、Order和Item。
如果要添加更多的表,比如添加地址,可以写成V_USER_ORDER_ITEM_ADDRESS,但是表名必须全写,不能大写。
不能缩写。
不然半年之后,我连哪些表名被缩写了都不记得了。

序列命名法最简单,但容易出错。
上次有一个存储过程插入数据,但是使用了错误的顺序,所有数据都插入到了其他表中。
因此,seq_user_id、seq_order_id和字段名必须小写并用下划线连接。
对不同的表使用不同的后缀非常重要。
如果user表和profile表都使用user_id,则seq_user_id应写为seq_user_profile_id。

存储过程和函数的名称相同,Pr_update_user、Fu_get_total,小写并带下划线,长度不超过3 0个字符。
上次有同事写了一个函数Fu_calcute_price,但是名字太长,IDE自动缩短为Fu_cal,导致调用的时候全都报错。
这是多么惨痛的教训啊。

触发器名称必须与表相关。
当我上次调试时,我看到了一个触发器Tr_before_insert_user,我知道它是在用户插入Users表之前触发的。
如果表名太长,例如Tr_before_insert_vnet_user_data,则应缩短主键名称,例如pk_vnet_user。

等一下,我突然想到这么复杂的命名规则,新学员肯定会抓狂的。
上次小王为VNET_USER_ORDER视图的名字纠结了很久,说如果join五个表的话,名字就太长了。
你必须这样想教他们如何使用缩写,哪些单词应该完整书写,哪些单词应该缩写为 4 个字母。

现在想想,命名数据库就像给数据赋予别名一样。
如果你做得好,其他人会像看到老朋友聊天一样看你的代码。
做得不好,就如同读天书一样。
但话虽如此,如果每个系统使用不同的前缀,例如VNET使用T_VNET_,MES使用T_MES_,我们是否必须重新考虑前缀长度的问题? 3 0个字符,表名、字段名、视图名、序列名、存储过程名、函数名、触发器名、主键名,限制太多,写代码时需要留多少空间?