今天在将开发环境中的门户数据库复制到新环境后,使用SqlSugar的ORM框架进行数据库操作的时候,出现了主键找不到的现象。排查了很久终于发现了关键点。特此记录。

1.开发环境:
    操作系统:CENTOS7 64位
    内存:    1GB
    CPU     1/1
    网络适配器:网桥模式
    安装模式:最小化安装
    系统语言设置:zh_CN.gb2312
    
    数据库版本:MySQL 5.6.29 binary 模式安装
    建立数据库之前:my.cnf参数配置
        character-set-server = utf8
        log-bin=mysql-bin
        skip-name-resolve
        lower_case_table_names = 0  #之后可能设置过1的现象
    开发数据库实例名称:GoodMES_P_V0_5
    数据库实例中表名称,列名称 全部大写
    具体还经过哪些设置暂时不记得了,但是最终的结果是,不论sql语句中表名称大小写,都能查到数据。根据推测,数据库大小写也都能认识。对数据库的操作是DOS.ORM
    
2.这次的部署环境:
    操作系统:CENTOS7 64位
    内存:    1GB
    CPU     1/1
    网络适配器:网桥模式
    安装模式:最小化安装
    系统语言设置:zh_CN.UTF-8
    
    数据库版本:MySQL 5.6.29 binary 模式安装
    数据库实例名称:G_START
    数据库实例中表名称,列名称 全部大写
    
    使用SqlSugar的ORM框架进行数据库操作的时候,出现了主键找不到的现象。通过记录mysql日志信息,得到数据库操作记录信息,发现SqlSugar的ORM框架对数据库的操作之前,必然都会将实体名称,表名称,列名称全部转换成大小写。然而由于mysql默认设置的是大小写敏感,故而找不到主键信息。同时针对需要主键信息来进行处理的内容,都会存在问题,因为SQLSugar的InSingle操作或者其他的针对主键的操作,都会进行一个获取主键的动作,而这个获取主键的动作是通过
    select DISTINCT TABLE_NAME as tableName,COLUMN_NAME as keyName from INFORMATION_SCHEMA.COLUMNS where table_name='" + tableName + "' AND COLUMN_KEY='PRI'这个SQL语句来获取的,虽然这里的tableName传入是正确的是表名称,但是由于是被转换成了小写,所以这里是查不到数据的。从而导致了找不到主键的情况(SQLSugar框架的坑还是大部分数据库操作框架的坑?)。
    查阅网上信息,说可以通过设置lower_case_table_names这个数据库的参数来进行设置,设置了lower_case_table_names=1(大小写不敏感)一个更严重的问题出现了,因为数据库实例的名称也是大写的。但是SQLsugar同样的进行了小写化操作。所以数据库仍然是找不到的,同样的mysql客户端在选择该数据库的时候,也出现了数据库未找到的情况。
    查询mysql官网,lower_case_table_names有第三个参数:
    0:默认值,大小写敏感;请注意如果在大小写不敏感的文件系统上用--lower-case-table-names=0强制设为0,并且使用不同的大小写访问MyISAM表名,会导致索引破坏。
    1:表名在硬盘上以小写保存,名称对大小写不敏感。MySQL将所有表名转换为小写以便存储和查找
    2:表名和数据库名在硬盘上使用CREATE TABLE或CREATE DATABASE语句指定的大小写进行保存,但MySQL将它们转换为小写以便查找。(这个操作需谨慎,因为一旦这样设置了,那么实际上就变成了表里不一的情况,查找问题就比较难了。)
    很明显我的目的是否能实现的最终拍板权还是文件系统,无论我怎么设置大小写敏感还是大小写不敏感,都无法对数据库进行操作。区别点在于一个是能连接到数据库,一个是连数据库都找不到了。
    所以我的最终结果是:
    1.设置数据库大小写不敏感
    2.重新配置一个实例:实例名称小写
    3.将开发环境中的数据表导出一份
    4.将表结构导入到部署环境,你会发现导入后的表名都变成了小写。但是表中的列的名称仍然是大写。
    
    结论:在windows下MySQL数据库中实例,表,列的名称都是大小写不区分的,随意折腾。但是到了类Unix系统,比如Ubuntu,CentOS,那么在部署数据库之前必须要谨慎考虑,是需要大小写敏感还是大小写不敏感。数据库中实例,表,列名称的命名是要用大写的还是小写的。万一处理不好,最糟糕的可能就是数据库重建。耗时耗力,还吃力不讨好。
    
    建议:命名全部小写;建议区分大小写。一旦设定,则不建议修改数据库设置。同时在应用时选择数据库操作框架的时候,需要谨慎考虑。了解底层对数据库的操作方式。

Linux下部署MySQL,大小写敏感踩坑记录的更多相关文章

  1. Linux下安装opencv(踩坑记录帖)

    1.首先安装依赖项:sudo apt install build-essential sudo apt install build-essentialsudo apt install cmake gi ...

  2. Centos7下搭建gitbook环境踩坑记录

    1.安装npm yum -y install npm 2.配置npm仓 npm config set registry https://mirrors.tencent.com/npm/ 3.安装git ...

  3. Win10自带Ubuntu子系统下Mysql安装踩坑记录

    linux系统为win10自带Ubuntu子系统 错误的安装过程 我按照一般的方法安装mysql,安装步骤如下 1.升级源 $ sudo apt-get update 2.安装mysql $ sudo ...

  4. 在Linux下部署mysql时,使用group by碰到的问题

    mysql使用group by 的时候报错,错误信息如下: 1055:ER_WRONG_FIELD_WITH_GROUP: Expression #2 of SELECT list is not in ...

  5. dell笔记本 win10 下安装 ubuntu16.04 踩坑记录

    硬件配置情况: dell笔记本-灵越-5577 —— I5七代(带有集显),8G内存条DDR4,GTX1050,128G固态硬盘,1T机械硬盘. 固态硬盘划分为3部分,100GB给win10的C盘,1 ...

  6. 复杂业务下向Mysql导入30万条数据代码优化的踩坑记录

    从毕业到现在第一次接触到超过30万条数据导入MySQL的场景(有点low),就是在顺丰公司接入我司EMM产品时需要将AD中的员工数据导入MySQL中,因此楼主负责的模块connector就派上了用场. ...

  7. CentOS7.4安装MySQL踩坑记录

    CentOS7.4安装MySQL踩坑记录 time: 2018.3.19 CentOS7.4安装MySQL时网上的文档虽然多但是不靠谱的也多, 可能因为版本与时间的问题, 所以记录下自己踩坑的过程, ...

  8. ubuntu 下安装docker 踩坑记录

    ubuntu 下安装docker 踩坑记录 # Setp : 移除旧版本Docker sudo apt-get remove docker docker-engine docker.io # Step ...

  9. linux下部署php项目-Apache、php、mysql关联

    linux下部署php项目环境可以分为两种,一种使用Apache,php,mysql的压缩包安装,一种用yum命令进行安装. 使用三种软件的压缩包进行安装,需要手动配置三者之间的关系.apache和p ...

随机推荐

  1. 0521 HTML基础

    一.web标准 web准备介绍: w3c:万维网联盟组织,用来制定web标准的机构(组织) web标准:制作网页遵循的规范 web准备规范的分类:结构标准.表现标准.行为标准. 结构:html.表示: ...

  2. F1 score,micro F1score,macro F1score 的定义

    F1 score,micro F1score,macro F1score 的定义 2018年09月28日 19:30:08 wanglei_1996 阅读数 976   本篇博客可能会继续更新 最近在 ...

  3. XP最高支持IE8

    1.https://www.microsoft.com/zh-CN/download/details.aspx?id=24488 适用于 Windows XP 的 Internet Explorer ...

  4. vs2015配置boost c++

    参考:https://blog.csdn.net/zengraoli/article/details/70187556 https://blog.csdn.net/misterfm/article/d ...

  5. Codeforces 358D Dima and Hares:dp【只考虑相邻元素】

    题目链接:http://codeforces.com/problemset/problem/358/D 题意: 有n个物品A[i]摆成一排,你要按照某一个顺序将它们全部取走. 其中,取走A[i]的收益 ...

  6. Codeforces 351B Jeff and Furik:概率 + 逆序对【结论题 or dp】

    题目链接:http://codeforces.com/problemset/problem/351/B 题意: 给你一个1到n的排列a[i]. Jeff和Furik轮流操作,Jeff先手. Jeff每 ...

  7. php构造函数的继承方法

    第一种情况:子类没有定义构造函数时,默认继承.例子: ? 1 2 3 4 5 6 7 8 9 10 11 12 <?php class A{  public $name;  function _ ...

  8. java:安装tomcat8/tomcat9(简单安装配置)

    java:安装tomcat8/tomcat9(简单安装配置) pache-tomcat-8.5.23(免安装板) 1.安装完成后右击我的电脑—属性—高级系统设置—环境变量, 在系统变量中添加以下变量 ...

  9. Jquery 取值,赋值学习总结

    <h2>获取和设置文本框值:</h2> <input type="button" value="赋值文件框" id="v ...

  10. JS获取ListBox所有项

    JS代码: var listbox = document.getElementById("<%=lbCustom.ClientID %>"); var values = ...