- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
MySQL对大小写敏感吗
之前看过阿里巴巴Java开发手册,在MySql建表规约里有看到:
【强制】表名、字段名必需使用小写字母或数字 , 禁止消灭数字开头,禁止两个下划线两头只 消灭数字。数据库字段名的修改代价很大,由于无法进行预发布,所以字段名称需要慎重考虑。
说明:MySQL 在 Windows 下不区分大小写,但在 Linux 下默认是区分大小写。因而,数据库名、 表名、字段名,都不允许消灭任何大写字母,避开节外生枝。
正例:aliyun _ admin , rdc _ config , level 3_ name 反例:AliyunAdmin , rdcConfig , level 3 name
假如没有真正遇到过类似的问题,有时候干巴巴的看这些规约体会不深,理解起来似懂非懂,并且也只是死记硬背而已。
1 一个表字母大小故事
最近本人在鼓捣一个项目玩玩,在本人本机上开发和测试过程中一直没有问题,但是部署到Linux服务器上后,发觉有报错,日志信息或许是:
MySQLSyntaxErrorException:?Table?kytu.tb_sutyHo?doesnt?exist
消灭了问题,有点郁闷,本地开发好好的,怎样部署服务器就不行了。有鬼……不过莫慌。看着错误提示很明显,不就是tb_sutyHo?表不存在吗!
①于是我不慌不忙打开nv(navicat),查看这个表在不在,一看还真在,数据库中显示的tb_sutyho?,不过h是小写;
②查看代码发觉代码中还真把表名写成tb_sutyHo?,就一个h写成大写H了。
问题找到了,原来是不当心写SQL的时候没有写对表名,改一下表名就搞定了,功能也一切正常了。一般情况下故事到这里也就应当结束了?问题找到了,也修复了,万事大吉了,稍后就可以吃鸡了。
对于不会玩吃鸡的我,到这里并没有结束,找到问题和处理问题的确很重要,但是找到问题消灭的根源更重要,这样就能在下次规避此类问题,作为一个程序员不要两次掉入一个坑里。
我在想这个问题,本地Window环境怎样就一直没有消灭这个报错提示呢?非要等我部署服务器才消灭,这到底是什么问题?(假如你对Mysql大小敏感很了解,以下内容可以跳过….)
于是就利用搜索引擎,发觉Mysql中把握数据库名和表名的大小写敏感由参数lower_case_table_names把握。
在本机Window环境查看如下:
mysql show variables like %case%;
+------------------------+-------+
| Variable_name | Value |
+------------------------+-------+
| lower_case_file_system | ON |
| lower_case_table_names | 1 |
+------------------------+-------+
在Linux服务器查看如下:
mysql show variables like %case%;
+------------------------+-------+
| Variable_name | Value |
+------------------------+-------+
| lower_case_file_system | OFF |
| lower_case_table_names | 0 |
+------------------------+-------+
从上面的结果已经可以看出不同了,然而对这两个参数还没有感觉,不晓得具体是什么意思。
在引见lower_case_table_names的时候,顺便也说一下lower_case_file_system。
lowercasefile_system
此变量描述数据名目所在的文件系统上文件名的区分大小写。OFF表示文件名区分大小写,ON表示它们不区分大小写。此变量是只读的,由于它反映了文件系统属性并设置它对文件系统没有影响。
lowercasetable_names
该参数为静态,可设置为0、1、2。
0 --大小写敏感。(Unix,Linux默认)?创建的库表将原样保存在磁盘上。如create database TeSt;将会创建一个TeSt的名目,create table AbCCC …将会原样生成AbCCC.frm。SQL语句也会原样解析。
1 --大小写不敏感。(Windows默认)?创建的库表时,MySQL将全部的库表名转换成小写存储在磁盘上。SQL语句同样会将库表名转换成小写。如需要查询以前创建的Testtable(生成Testtable.frm文件)
文档评论(0)