mysql存储过程 大小写_MySQL数据记录大小写敏感问题【转】
MySQL大小写敏感
字符串大小写敏感和Mysql的数据库的名字、表名字、字段名字、还有字段值有关。
1.和数据库名字、表名字、存储过程和触发器有关
为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表名用小写保存。
如果你使用innodb表,为了避免避免大小写敏感问题,可以把lower_case_table_names=1
2.和字段名字有关字段名是不区分大小写的
3.和字段值有关字段值的大小写由Mysql的collate来控制。提到collate,就不得不说字符集。字符集是一套符号和编码,collate
是在字符集内用于比较字符的一套规则,比如定义'A'
而言,collate以其相关的字符集名开始,通常包括一个语言名,并且以_ci(大小写不敏感)、_cs(大小写敏感)
或_bin(二元)结束 。
比如 utf8字符集:
utf8_general_ci,表示不区分大小写,这个是utf8字符集默认的collate;
utf8_general_cs表示区分大小写,
utf8_bin表示二进制比较,同样也区分大小写。
查看数据库的字符集相关信息
mysql> show variables like '%character%';
+--------------------------+----------------------------------+
| Variable_name | Value |
+--------------------------+----------------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /usr/local/mysql/share/charsets/ |
+--------------------------+----------------------------------+
8 rows in set (0.00 sec)
查看数据库collation相关信息
mysql> show variables like '%collation%';
+----------------------+-----------------+
| Variable_name | Value |
+----------------------+-----------------+
| collation_connection | utf8_general_ci |
| collation_database | utf8_general_ci |
| collation_server | utf8_general_ci |
+----------------------+-----------------+
3 rows in set (0.01 sec)
test是默认创建的数据库
mysql> show create database test;
+----------+---------------------------------------------------------------+
| Database | Create Database |
+----------+---------------------------------------------------------------+
| test | CREATE DATABASE `test` /*!40100 DEFAULT CHARACTER SET utf8 */ |
+----------+---------------------------------------------------------------+
1 row in set (0.00 sec)
testx是指定字符集和collation的数据库
mysql> create database testx default character set utf8 collate utf8_bin;
Query OK, 1 row affected (0.00 sec)
mysql> show create database testx;
+----------+---------------------------------------------------------------------------------+
| Database | Create Database |
+----------+---------------------------------------------------------------------------------+
| testx | CREATE DATABASE `testx` /*!40100 DEFAULT CHARACTER SET utf8 COLLATE utf8_bin */ |
+----------+---------------------------------------------------------------------------------+
1 row in set (0.00 sec)
case2是默认创建的表
mysql> show create table case2;
+-------+------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table |
+-------+------------------------------------------------------------------------------------------------------------------------+
| case2 | CREATE TABLE `case2` (
`a` int(11) DEFAULT NULL,
`B` varchar(10) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
+-------+------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
case4是指定字符集和collate的表
mysql> create table case4(a int(11),B varchar(10)) default character set utf8 collate utf8_bin;;
Query OK, 0 rows affected (0.12 sec)
mysql> show create table case4;
+-------+----------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table |
+-------+----------------------------------------------------------------------------------------------------------------------------------------------------------+
| case4 | CREATE TABLE `case4` (
`a` int(11) DEFAULT NULL,
`B` varchar(10) COLLATE utf8_bin DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin |
+-------+----------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
我们可以在创建数据库或表时指定是否大小写敏感,如果没有指定的话,通过语句级的collate和binary也可以实现
mysql> select * from case1;
+------+------+
| a | B |
+------+------+
| 1 | AAA |
| 2 | bbb |
| 4 | AAA |
| 3 | BBB |
+------+------+
4 rows in set (0.00 sec)
mysql> select * from case1 where B like '%b%';
+------+------+
| a | B |
+------+------+
| 2 | bbb |
| 3 | BBB |
+------+------+
2 rows in set (0.00 sec)
指定Collation
mysql> select * from case1 where B like '%b%' collate utf8_bin;
+------+------+
| a | B |
+------+------+
| 2 | bbb |
+------+------+
1 row in set (0.01 sec)
通过binary把字符串转化为二进制比较,由于大小写字符的二进制肯定不同,因此也是区分大小的一种方式
mysql> select * from case1 where binary B like '%b%';
+------+------+
| a | B |
+------+------+
| 2 | bbb |
+------+------+
1 row in set (0.00 sec)
mysql>
最后要说明一点的是Collation与索引存储的关系。因为Collation是用于字符串之间比较,而索引是基于比较有序排列的,
因此Collation会影响记录的索引顺序
把lower_case_table_names从0改变为1
在你把lower_case_table_names设置为1时,在restart你的mysqld之前,请把数据库名和表名更改为小写
mysql> RENAME TABLE T1 TO t1;
以上文章转自
Mysql大小写敏感 - 冰刀(skate) - 博客频道 - CSDN.NET
http://blog.csdn.net/wyzxg/article/details/44236259
===========================================================================================================
Mysql中字段大小写敏感问题 - 猪先森 - 博客频道 - CSDN.NET
http://blog.csdn.net/Del_Zhu/article/details/49998935
MySQL中大小写敏感问题经常会带来很多问题:
比如说:
select * from test 和 SELECT * FROM TEST 是无差别的。这个还好理解,但是如果遇到下面这样的情况:
select * from test where name = 'del' 和 select * from test where name='DEL' 无差别
那就很可怕了!!
解决方法
这是什么原因呢?原来是因为MySQL中字符编码导致的。简单的说:
utf-8_bin
以二进制值进行比较,也就是区分大小写
uft-8_general_ci
一般比较,不区分大小写 ‘A’=’a’collation:校对
摘自: mysql中的collation什么意思 其中的utf8-bin
所以才会发生上面那种这么奇怪的问题!
另外,网上也有说添加binary关键字进行字段修饰的解决方法:
alter table test modify name binary;
其实本质上也是把collatioin(校对)模式改成二进制校对,实现大小写敏感。
mysql存储过程 大小写_MySQL数据记录大小写敏感问题【转】相关推荐
- MySQL存储过程 — 解析 XML 数据并实现插入操作
MySQL存储过程 - 解析 XML 数据并实现插入操作 一.概述: 最近在做项目的过程中,需要利用MySQL存储过程 解析 XML数据并进行插入操作,因此就学习了下.MySQL 解析 XML 的思路 ...
- 利用MYSQL存储过程批量造数据
作为一名测试工程师,造这种存量数据,一般都是压测的时候需要一些存量数据.我平时用Jmeter比较多,比较少用到MYSQL的存储过程,最近浏览博客,看到有人用这个方式造数据,就趁机体验了一把. 一般的压 ...
- mysql 存储过程查询优化_mysql用存储过程插入百万条数据, 及查询优化
查看所有存储过程: show procedure status; 查看详细存储过程 ptest: show create procedure ptest; 存储过程插入数据: create table ...
- mysql降序后去重_Mysql 数据记录去重后按字段排序
实现效果:去重-取最新的-排序 例子 : 按用户ID获取历史记录中某个人的记录,要求非重复的且每条只获取最新的,同时按添加时间倒序排列的 实现 :SELECT * FROM ( SELECT * FR ...
- mysql 存储过程 脚本_mysql利用存储过程插入大量数据脚本
1.检查是否开启二进制日志 #查看是否开启二进制日志,ON表示开启,OFF表示没有开启 show variables like'log_bin_trust_function_creators'; #若 ...
- mysql存储过程触发器_MySQL存储过程及触发器
一.存储过程 存储过程的基本格式如下: -- 声明结束符 -- 创建存储过程 DELIMITER $ -- 声明存储过程的结束符 CREATE PROCEDURE pro_test() --存储过程名 ...
- mysql存储过程应用_mysql 存储过程的应用
MySQL存储过程的创建 (1). 格式 MySQL存储过程创建的格式:CREATE PROCEDURE 过程名 ([过程參数[,...]]) [特性 ...] 过程体 这里先举个样例: mysql& ...
- mysql 存储过程 光标_mysql存储过程 光标
当我可以在60秒内在类似硬件上执行相同操作时,您的查询要花2个小时才能执行,这是一件非常错误的事情. 以下某些内容可能会有所帮助... 为您的引擎调整MySQL 检查服务器配置并进行相应优化.以下某些 ...
- mysql 存储过程 队列_mysql使用存储过程函数实现批量插入
写这边文章的目的,是想结合mysql 存储过程+函数完成一个批量删除的功能吧...正好也好加深下对procedure和function的熟练操作吧... 废话不多说,我就直接上表结构啦哈,如下: cr ...
最新文章
- bootstrap绿色大气后台模板下载[转]
- unity 给图片边缘_Unity Shader 屏幕后效果——边缘检测
- Feign客户端 - 超时时间配置
- [Ruby]$: 是什么意思?
- 在.NET Core中使用MEF
- 2021中国民营企业500强调研分析报告
- QT 线程池 + TCP 小试(二)实现通信功能
- 内核同步机制之Mutex Exclusion
- 《英雄联盟》手游官宣!仍是原来配方和味道 它还能再火十年吗?
- SPSS入门教程—对数据进行去重操作的相关方法
- Python模块和包的导入
- [Tyvj1450 GF打Dota]
- Unity接入移动MM支付(Android)
- 帧内预测——initAdiPattern
- 从事Web前端的工作,日常工作内容有哪些?
- STM32F4型号命名规则
- 数学建模,8月学习感想
- 光脚丫思考Vue3与实战:第05章 计算属性和侦听器 第02节 侦听器
- Qt窗口置顶的俩种方法
- Intellij IDEA中快速实现接口方法的快捷键