记录前天几遇到一个问题。
mysql在根据字符串查询的时候:
select * from poc_sku where barcode = 'ZR01961050100'
查出的barcode值是zr01961050100。
也就是说,mysql默认为字符串'zr'和'ZR'是一样的。但在java中,如果大小写敏感,显然这是不对的。
如果想要查询的时候,严格区分字符串大小写,解决方案很简单,在查询的时候,使用关键字binary ,指定相应的列转换成二进制就可以了,比如上面的sql变成:
select * from poc_sku where binary barcode = 'ZR01961050100'。
上面只是查询的时候简单处理,但每次都要做二进制转换,似乎也不太合理。最好的方法是在建表的时候,指定相关的列大小写敏感。比如:
原先建表sql:(此时大小写不敏感)
CREATE TABLE `poc_sku` ( `poc_sku_id` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '商品ID', `barcode` VARCHAR(128) NOT NULL DEFAULT '' COMMENT '商品条形码', `poc_vendor_code` VARCHAR(50) NOT NULL DEFAULT '' COMMENT '商家编码', PRIMARY KEY (`poc_sku_id`) ) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='商品基本信息'
修改后,指定barcode列严重区分大小写:
CREATE TABLE `poc_sku` ( `poc_sku_id` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '商品ID', `barcode` VARCHAR(128) BINARY NOT NULL DEFAULT '' COMMENT '商品条形码', `poc_vendor_code` VARCHAR(50) NOT NULL DEFAULT '' COMMENT '商家编码', PRIMARY KEY (`poc_sku_id`) ) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='商品基本信息'
如果表原先已经建好了,并且线上已经有好多数据之后不方便drop表重建,也可以用修改表结构的ddl做变更,如:
ALTER TABLE poc_sku MODIFY `barcode` VARCHAR(128) BINARY NOT NULL DEFAULT '' COMMENT '商品条形码';
相关推荐
就是mysql默认的字段值不区分大小写?这点是比较令人头痛的事。直接使用客户端用sql查询数据库。 发现的确是大小不敏感 。 通过查询资料发现需要设置collate(校对) 。 collate规则: *_bin: 表示的是binary case...
mysql 查询时没有对字符串区分大小写的原因主要在于创建表时没有指定其校对规则,或者校对规则设置成了不区分大小写。 区分大小写的设置通常是: utf8****_bin ,以 “_bin” 结尾的表示区分大小写,它表示的是:...
不区分大小写的字符串设置查询,前缀查询和不区分大小写的索引创建。 基本的全文搜索,用于搜索术语列表,并创建FTS索引。 安装 将此行添加到您的应用程序的Gemfile中: gem 'db_text_search' , '~> 0.3.2' 用法 ...
mysql字符类型默认是不区分大小写的,即select * from t where name=’AAA’与=’aaa’没区别,以下是测试的例子 (root@localhost)[hello]> create table test1(id int, name varchar(10)); (root@localhost)[hello...
判断是否含有字母 select PATINDEX('%[A-Za-z]%', ... 您可能感兴趣的文章:MS SQL 实现验证字符串是否包含有大小写字母的功能详解MySQL查询时区分字符串中字母大小写的方法SqlServer 获取字符串中小写字母的sql语句
BINARY不是函数,是类型转换运算符,它用来强制它后面的字符串为一个二进制字符串,可以理解为在字符串比较的时候区分大小写
Q : Mysql 查询是否区分大小写? Q : 如何定义 REGEXP? Q : 什么是视图?什么是存储过程?什么是触发器? Q : Mysql 服务器默认端口是什么? Q : 检测端口是否运行的方法有哪些? Q : 什么是分区表? Q : 分区表...
-i 不区分大小写; -v 排除指定字串 示例: grep mysql /root/install.log grep -R --include=*.h --include=.cpp xxxx ./ cut命令 cut命令可以从一个文本文件或者文本流中提取文本列 语法:cut -d '分隔字符串' -f...
3或者mysql, mysql数据库,不区分大小写,需java1.5及以上版本 4或者sybase, sybase数据库,不区分大小写(暂未测试) -url 数据库连接的url.默认空字符串 如果有url参数,则-i-p-s-dn参数全无效。 如果没有url参数...
注意,上面的例子中,单词 INTERVAL 和关键词 type 是不区分字母大小写的。 EXTRACT(type FROM date) EXTRACT() 函数使用与 DATE_ADD() 或 DATE_SUB() 一致的间隔类型,但是它用于指定从日期中提取的部分,而不是...
您可能感兴趣的文章:MySQL修改时区的方法小结MySQL查看和修改时区的方法详解MySQL查询时区分字符串中字母大小写的方法mysql中url时区的陷阱该如何规避详解MySQL timestamp的类型与时区实例详解有关 PHP 和
间类型:尽量使用TIMESTAMP类型,... 您可能感兴趣的文章:详解MySQL查询时区分字符串中字母大小写的方法mysql时区问题有关 PHP 和 MySQL 时区的一点总结MySql查询时间段的方法mysql之TIMESTAMP(时间戳)用法详解mysq
|SQLite3简介 SQLite3只是一个轻型的嵌入式数据库引擎,占用资源非常低,处理速度比Mysql还快,专门用于移动设备上进行适量的数据存取,它只是...特点:不区分大小写,每条语句后加”;”结尾。 关键字:select、inse
模式查询 1. SQL匹配模式 2. 正则表达式匹配模式(一般不...4.使用sql匹配模式,匹配时,不区分大小写 #查询用户名以某个字符开头的用户 #查询用户名以字符'l'开头的用户: l% SELECT * FROM user WHERE username L
但字符串常量区分大小写。建议命令大写,表名库名小写; <2> SQL语句可单行或多行书写,以";"结尾。关键词不能跨多行或简写。 <3> 用空格和缩进来提高语句的可读性。子句通常位于独立行,便于编辑,提高可读性。 ...
但字符串常量区分大小写。建议命令大写,表名库名小写; <2> SQL语句可单行或多行书写,以";"结尾。关键词不能跨多行或简写。 <3> 用空格和缩进来提高语句的可读性。子句通常位于独立行,便于编辑,提高可读性。 ...
实例091 统一上传文件名称的大小写 125 实例092 论坛中直接输出HTML脚本 126 实例093 统计帖子标题的长度 127 实例094 计算论坛帖子的字节数 128 实例095 实现帖子内容的定位查找 129 实例096 去除帖子标题的首尾...