• Docker容器内Mysql大小写敏感方案解决




    相关原文地址:

    Docker 部署 MySql 并修改为大小写不敏感
    CSDN:jesseyoung:mysql运维-lower_case_table_names(大小写敏感)
    博客园:Nihaorz:解决Docker安装MySQL不区分大小写问题
    CSDN:996.NO:docker下mysql表名大小写区分的问题



    查看当前mysql大小写敏感的配置:

    show global variables like '%lower_case%';
    

    变量lower_case_file_system说明是否数据目录所在的文件系统对文件名的大小写敏感。ON说明对文件名的大小写不敏感,OFF表示敏感。
    在这里插入图片描述

    Linux下:

    • 数据库名与表名是严格区分大小写的;
    • 表的别名是严格区分大小写的;
    • 列名与列的别名在所有的情况下均是忽略大小写的;
    • 变量名也是严格区分大小写的;

    Windows下:

    • 都不区分大小写

    一、(lower_case_table_names)参数说明

    unix下lower_case_table_names默认值为 0 .Windows下默认值是 1 .Mac OS X下默认值是 2。

    参数值 解释
    0 使用CREATE TABLE或CREATE DATABASE语句指定的大小写字母在硬盘上保存表名和数据库名。名称比较对大小写敏感。在大小写不敏感的操作系统如windows或Mac OS x上我们不能将该参数设为0,如果在大小写不敏感的文件系统上将–lowercase-table-names强制设为0,并且使用不同的大小写访问MyISAM表名,可能会导致索引破坏。
    1 表名在硬盘上以小写保存,名称比较对大小写不敏感。MySQL将所有表名转换为小写在存储和查找表上。该行为也适合数据库名和表的别名。该值为Windows的默认值。
    2 表名和数据库名在硬盘上使用CREATE TABLE或CREATE DATABASE语句指定的大小写字母进行保存,但MySQL将它们转换为小写在查找表上。名称比较对大小写不敏感,即按照大小写来保存,按照小写来比较。注释:只在对大小写不敏感的文件系统上适用! innodb表名用小写保存。

    二、Docker 部署 MySql 并修改为大小写不敏感

    2.1直接在Docker启动的时候,添加参数,设置为对小写不敏感

    使用hibernate作为和数据库交互的框架,使用docker安装mysql,由于我在实体类的注解中@Table注解中的name都是大写,但是我在数据库里面建立的表都是小写,倒是查不到数据,进去数据库里面可以看到,同样的表有大写。小写两份,如下图:
    在这里插入图片描述
    查询的时候hibernate获取的表名称是实体中定义的表名称,是大写的,但是我的数据都在小写的表里,所以查询不到数据,此时可以通过设置mysql不区分大小写来解决这个问题,如果是在linux中启动的mysql需要修改lower_case_table_names=1来忽略大小写,但是docker中,启动的时候就可以设置这个参数:

    docker run --name mysql-5.5 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root -d mysql:5.5 --lower_case_table_names=1
    

    2.2Docker容器内进行修改

    先删除/var/lib/mysql/ 中的数据。

    1. 进入 docker 容器 MySQL
    docker exec -it mysql  /bin/bash
    
    1. 配置镜像源安装 VIM
    mv /etc/apt/sources.list /etc/apt/sources.list.bak 
    echo "deb http://mirrors.163.com/debian/ jessie main non-free contrib" >/etc/apt/sources.list 
    echo "deb http://mirrors.163.com/debian/ jessie-proposed-updates main non-free contrib" >>/etc/apt/sources.list 
    echo "deb-src http://mirrors.163.com/debian/ jessie main non-free contrib" >>/etc/apt/sources.list 
    echo "deb-src http://mirrors.163.com/debian/ jessie-proposed-updates main non-free contrib" >>/etc/apt/sources.list 
    #更新安装源 
    apt-get update 
    #如果下载过程中卡在[waiting for headers] 删除/var/cache/apt/archives/下的所有文件 
    #安装vim 
    apt-get install vim
    
    1. 编辑/etc/mysql/mysql.conf.d/mysqld.cnf 文件
    vi /etc/mysql/mysql.conf.d/mysqld.cnf
    
    #[mysqld]后添加 
    lower_case_table_names=1
    
    1. 重启应用
    #容器中执行
    service mysql restart
    
    #或者退出容器直接重启mysql容器
    docker restart mysql
    

    注意事项:

    • 在Unix中如果以前lower_case_tables_name = 0将lower_case_tables_name设置为1之前,重启mysqld之前,必须先将旧的数据库名和表名转换为小写。
  • 相关阅读:
    Centos下一个server安装的版本号mysql
    android 玩愤怒的小鸟等游戏的时候全屏TP失败
    6.8 一般处理语言
    [AC自己主动机+可能性dp] hdu 3689 Infinite monkey theorem
    POJ1185:火炮(减少国家)
    教你如何下载音乐的网站只试镜
    实现js呼叫流行
    [Angular 2] Async Http
    [Typescript] Function defination
    [React] React Router: setRouteWillLeaveHook
  • 原文地址:https://www.cnblogs.com/aixing/p/13327251.html
Copyright © 2020-2023  润新知