mysql 大小写 if_【已解决】Windows下 MySQL大小写敏感 解决方案及分析

Windows下 MySQL大小写敏感配置

zoerywzhou@163.com

作者:Zhouwan

2017-3-27

最近在window系统下 操作Linux系统下创建的数据库,发现有些不对劲,比较了半天才发现是大小写敏感的问题造成的。网上搜索了一下,解决了这个问题,做个简明扼要的记录。

按照网上的说明:

WINDOWS:

编辑MySQL安装目录下的my.ini 文件,在[mysqld]节下 添加 lower_case_table_names=0 (备注:为0时大小写敏感,为1时大小写不敏感,默认为1),可以实现MySql按照建表Sql语句的大小写状态来定义表名。

具体操作的时候会发现,理论和实践总是有差异的:

我的MySQL安装路径为:C:\Program Files\MySQL\MySQL Server 5.7\bin(网上有的说my.ini配置文件在这个文件夹下)

但是my.ini所在的文件路径为:C:\ProgramData\MySQL\MySQL Server 5.7\my.ini

然后在[mysqld]节下 添加 lower_case_table_names=0。

配置好文件了,去试一下咋样。

然后,还没重启系统进行测试,在另一个博文里看到了官方手册的网址链接,按捺不住好奇心去看一下。发现上面的这个配置是不可行的(具体分析见下面的划重点)

可能出现的错误可参见这篇求助博文的内容以及下面的讨论:http://bbs.csdn.net/topics/391860287

(在官网说明的基础上加上我的独家中文解说 O(∩_∩)O~英文好的同学最好直接看英文文档,说的比较清楚)

How table and database names are stored on disk and used in MySQL is affected by the lower_case_table_names system variable, which you can set when starting mysqld. lower_case_table_names can take the values shown in the following table. This variable does not affect case sensitivity of trigger identifiers. OnUnix, the default value of lower_case_table_names is 0. On Windows, the default value is 1. On OS X, the default value is2.

PS:mac OS(2012年前称Mac OS X,2012年-2016年称OS X)

ValueMeaning

0

Table and database names are stored on disk using the lettercase specified in the CREATE TABLE or CREATE DATABASE statement. Name comparisons are case sensitive.

(总结:存储和查询的时候都大小写敏感,都要是按照建表时指定的写法)

You should not set this variable to 0 if you are running MySQL on a system that has case-insensitive file names (such as Windows or OS X). If you force this variable to 0 with --lower-case-table-names=0 on a case-insensitive file system and access MyISAM tablenames using different lettercases, index corruption may result.(此处划重点)

1

Table names are stored in lowercase on disk and name comparisons are not case sensitive. MySQL converts all table names to lowercase on storage and lookup. This behavior also applies to database names and table aliases.

(总结:存储和查询的时候大小写都不敏感,都转换为小写字母)

2

Table and database names are stored on disk using the lettercase specified in the CREATE TABLE or CREATE DATABASE statement, but MySQL converts them to lowercase on lookup. Name comparisons are not case sensitive. This works only on file systems that are not case sensitive! InnoDB table names are stored in lowercase, as for lower_case_table_names=1.

(总结:存储时大小写敏感,按照建表时指定的写法;查询时都转换为小写字母)

1、单平台:If you are using MySQL on only one platform, you do not normally have to change the lower_case_table_names variable from its default value.

2、跨平台:However, you may encounter difficulties if you want totransfer tables between platforms that differ in file system case sensitivity. For example, on Unix, you can have two different tables named my_table and MY_TABLE, but on Windows these two names are considered identical. To avoid data transfer problems arising from lettercase of database or table names, you have two options:(跨平台的MySQL大小写敏感解决方案在此!!!看看官网怎么说~)

Use lower_case_table_names=1 on all systems. The main disadvantage with this is that when you use SHOW TABLES or SHOW DATABASES, you do not see the names in their original lettercase.

Use lower_case_table_names=0on Unix and lower_case_table_names=2on Windows. This preserves the lettercase of database and table names. The disadvantage of this is that you must ensure that your statements always refer to your database and table names with the correct lettercase on Windows. If you transfer your statements to Unix, where lettercase is significant, they do not work if the lettercase is incorrect.

Exception: If you are usingInnoDB tables and you are trying to avoid these data transfer problems, you should set lower_case_table_names to1 on all platforms to force names to be converted to lowercase.

有点复杂。。。本来看懂了的,又出来了个Exception。。。本来愉悦的心情又down了,因为我的table就是InnoDB,看了半天想去配置文件大展身手来着。。。

好吧,那就先不管跨不跨平台了,也不管配置文件my.ini了。直接上手使用的话,想要区别大小写,可以在查询语句的时候加上Binary,具体实现如下:

(此段文字的参考博文:http://www.cnblogs.com/softidea/p/6047766.html。在此博文的基础上,内容已大幅度精简提炼)

参考方案:

1、在建表时指定大小写敏感:

MySql默认查询是不区分大小写的,如果需要区分他,必须在建表的时候,Binary标示敏感的属性.

CREATE TABLE NAME(

name VARCHAR(10)  BINARY);

2、 在查询条件的字段名前 加上binary:

在SQL语句中实现 SELECT * FROM TABLE NAME WHEREBINARY name=‘Clip‘;

3、 设置字符集使其大小写敏感:

utf8_general_ci --不区分大小写

utf8_bin--区分大小写

【设置collate(校对) 。 collate规则:

*_bin: 表示的是binary case sensitive collation,也就是说是区分大小写的

*_cs: case sensitive collation,区分大小写

*_ci: case insensitive collation,不区分大小写 】

4、可以修改该字段的collation 为 binary

比如:

ALTER TABLE TABLENAME MODIFY COLUMN COLUMNNAME VARCHAR(50) BINARY CHARACTERSET utf8  COLLATE utf8_bin DEFAULT NULL;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/304126.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

我对CTO的理解 CTO要有技术魅力[转载]

编者按:关于CTO这个热门职业的理解总会引发热议,下面这篇博文出自资深从业人员,观点来自实践,很尖锐也很有见地。 1)错误都是自上而下 当事情出现混乱的时候,人们总是寻求寄托于Process的制定,很多的管理者…

详解全排列算法

简介给定 {1, 2, 3, , , n},其全排列为 n! 个,这是最基础的高中组合数学知识。我们以 n4 为例,其全部排列如下图(以字典序树形式来呈现):我们很容易想到用递归来求出它的所有全排列。仔细观察上图&#xff…

VS2019 调试技巧之附加进程

C# 创建服务并附加到进程进行调试步骤一:在任务栏右键-》》点击任务管理器-》》选择服务,找到启动的进程PID或者WINR 进入cmd命令 输入 netstat -ano | find "进程端口" 找端口步骤二:VS中找到“调试”菜单,选择“…

sql同时向两个表插入数据_SQL入门-数据库和客户端的安装,表的创建和数据插入...

1、如何验证MySQL数据库安装成功按照上图操作打开SQL命令行客户端输入安装MySQL时设置的密码并按enter键,得到下图:如果有显示出来红框里的内容,就表示安装成功。红框里的内容表示的是MySQL数据库版本号。2、如何用客户端(Navicat…

在sp_executesql中使用like字句

在sp_executesql中可以执行参数化的sql,但是如果sql中有like,那么一般都要拼字符串,下面的例子把两者结合了起来,既有拼sql的灵活性,又有参数化sql的优点。 declare LikeSql nvarchar(32);--定义一个like变量&#xff…

我是怎么进入Oracle这样的大企业的?

导语:人工智能是泡沫么?AI产业的未来将何去何从?机器学习又该怎么学习?AI行业从业者又是怎么看待这个行业的呢?踏入一个行业之前最好对这个行业有个全方位的了解。本文作者饶毅,现就职于甲骨文公司。AI行业…

websocket文档_WebSocket推送 原理扫盲到上手实践

关于服务端推送技术,大家比较熟悉的可能就是轮询,但是轮询只能是由客户端先发起http请求。在HTTP1.1中的keep-alive方式建立的http连接,但是一个Request只能对应一个Response,而且这个Response是被动的,不能主动发起。…

DISCUZ7.2在通达OA2009桌面显示技巧

最近在测试DISCUZ 和通达...猛然间看到,,,可以DISCUZ可以和通达完美结合,禁不住进行了测试.....效果还挺好的...最初效果图如下:感觉挺别扭的,于是将DISCUZ调用代码更改了代码如下:[show1] <table width"100%" > <tr> <td alignleft> <di…

如何在 ASP.Net Core 中使用 Lamar

ASP.Net Core 自带了一个极简的 开箱即用 的依赖注入容器&#xff0c;实际上&#xff0c;你还可以使用第三方的 依赖注入容器 来替代它&#xff0c;依赖注入是一种设计模式&#xff0c;它能够有效的实现对象之间的解耦并有利于提高单元测试和维护性&#xff0c;你可以使用 依赖…

扎克伯格做了26张PPT,员工效率提10倍,已被疯狂传阅!

1、时间常有&#xff0c;时间在于优先。2、时间总会有的&#xff1a;每天只计划 4&#xff5e;5 小时真正的工作。3、当你在状态时&#xff0c;就多干点&#xff1b;不然就好好休息&#xff1a;有时候会连着几天不是工作状态&#xff0c;有时在工作状态时却又能天天忙活 12 小时…

2010南非世界杯32强手绘海报

2010南非世界杯32强手绘海报 2010年南非世界杯已经进入最后的倒计时&#xff0c;近日&#xff0c;ESPN推出了一组以世界杯32强为主题的手绘海报。在这组颇有漫画性质的海报中&#xff0c;32强每支球队的特点都是展现得淋淋尽致&#xff0c;卡卡、梅西、C罗、托雷斯等球星也自然…

jsp后台批量导入excel表格数据到mysql中_PHP批量导入excell表格到mysql数据库

PHP批量导入excell表格到mysql数据库,本人通过亲自测试&#xff0c;在这里分享给大家1&#xff0c;下载 php excell类库网上搜索可以下载&#xff0c;这里不写地址2&#xff0c;建html文件请选择你要上传的EXCELL:excell下载模板请选择你要上传的excell:3,php代码写入//批量上…

鹅厂二面,Nginx回忆录

上周二面鹅厂&#xff0c;面试官问出了“nginx你了解吗&#xff1f;”这样宽泛直白的句式&#xff0c;我一时抓不到重点&#xff0c;一时语噻。下班想了一下&#xff0c;平时潜移默化用到不少nginx的能力&#xff0c;但在面试的时候没有吹成对应的概念。面谈nginx核心能力nginx…

nagios监控mysql主机,nginx,cpu,网卡流量

nagios安装完成&#xff0c;打开/usr/local/nagios/etc/nagios.cfg去掉cfg_dir/usr/local/nagios/etc/servers前面的#号&#xff0c;并创建/usr/local/nagios/etc/servers目录&#xff08;此目录下放被监控机的配置文件&#xff09;&#xff0c;重启nagios服务service nagios r…

干货|吴恩达Coursera课程教你学习神经网络二!

上一周的课程中讲了神经网络的结构以及正向传播(feed forward)过程&#xff0c;了解了神经网络是如何进行预测的&#xff0c;但是预测的结果怎么和真是结果进行比较以及发现了错误如何修改还没有提及。这一周的课程中&#xff0c;介绍了cost function作为结果比较的标准以及bac…

vue预加载动态生成runtime.js_预渲染 prerender-spa-plugin 避坑指南

预渲染原理在webpack打包结束并生成文件后&#xff08;after-emit hook&#xff09;&#xff0c;会启动一个server模拟网站的运行&#xff0c;用puppeteer&#xff08;google官方的headless 无头浏览器浏览器&#xff09;访问指定的页面route&#xff0c;得到相应的html结构&am…

Dotnet的数据定位和匹配

Dotnet里&#xff0c;数据定位和匹配的相关编程现在变得很舒服。最近项目紧&#xff0c;还要不停出差。所以&#xff0c;写个短点的、最近经常用到的内容&#xff1a;数据定位和匹配。数据定位假设我们有这样一个数组&#xff1a;var array new int[] { 1, 2, 3, 4, 5, 6, 7, …

一年后,我又来了

差不多一年没有更新过博客了&#xff0c;这一年&#xff0c;怀孕生子&#xff0c;人变懒惰了&#xff0c;不想思考。在家休假也大半年了&#xff0c;颓废&#xff0c;什么也没干。现在宝宝已经两个多月了&#xff0c;没多久也要上班了&#xff0c;生活也逐渐走上正轨&#xff0…

mysql怎么存照片信息_mysql怎么存储图片信息?

方法一&#xff1a;把照片放进数据库&#xff0c;照片的格式最好是bmp&#xff0c;这样就可以在窗体上显示出来&#xff0c;不过这样数据库的体积会暴增。详细的使用方法请参考Access帮助中的 PictureData 属性(本文末尾有相关帮助)。而且&#xff0c;你可以直接用 commdlg API…