记录前天几遇到一个问题。
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是一种广泛使用的开源关系型数据库管理系统,其默认配置在处理字符串时通常是不区分大小写的,这对于某些场景,比如实现特定的搜索逻辑或满足特定的数据唯一性要求,可能会造成困扰。本篇文章将深入探讨如何在...
在MySQL数据库中,字符串查询是否区分大小写主要取决于所使用的字符集(character set)和校对规则(collation)。字符集定义了数据的编码方式,而校对规则则规定了如何比较和排序这些字符。当你在进行SQL查询时发现...
MySQL在处理字符串时,默认是区分大小写的。但在实际应用中,我们可以通过多种方式调整这一行为: 1. **创建表时指定大小写敏感性**: - 可以在创建表时为某个字段指定 `BINARY` 属性来使其区分大小写。 ```sql ...
在MySQL数据库中,查询操作默认情况下是不区分大小写的,这意味着如果你在查询条件中使用了不同的大小写字母,比如"aaa"和"Aaa",它们会被视为相同,从而可能导致你期望的精确匹配失败。这对于一些特定场景,比如...
此外,在 mysql table editor 中也可以直接勾选 BINARY 项,以便区分大小写。 MySQL 的 SQL 语句大小写不敏感问题是一个需要注意的问题,通过设置表名的大小写规则和字段的 BINARY 属性,可以解决这个问题。
`UPPER()`可以将字符串转换为大写,而`ILIKE`则用于不区分大小写的字符串比较。 ##### 示例查询语句 ```sql -- 使用UPPER()函数 SELECT * FROM "TUser" WHERE UPPER("Name") LIKE '%TONY%'; -- 使用ILIKE操作符 ...
在MySQL数据库中,查询操作默认情况下是不区分大小写的,这意味着如果你在查询时输入的字符串与数据库中的数据在大小写上不完全匹配,查询仍然可能返回结果。这在某些场景下可能会导致意料之外的问题,比如在用户...
不区分大小写的字符串设置查询,前缀查询和不区分大小写的索引创建。 基本的全文搜索,用于搜索术语列表,并创建FTS索引。 安装 将此行添加到您的应用程序的Gemfile中: gem 'db_text_search' , '~> 0.3.2' 用法 ...
9. LENGTH(str):计算字符串str的字符数,不区分大小写。 10. LTRIM(str):删除字符串str左侧的空格。 11. POSITION(substr, str):返回子串substr在字符串str中首次出现的位置,如果不存在,返回0。 12. QUOTE...
mysql字符类型默认是不区分大小写的,即select * from t where name=’AAA’与=’aaa’没区别,以下是测试的例子 (root@localhost)[hello]> create table test1(id int, name varchar(10)); (root@localhost)[hello...
这两种函数对于标准化文本数据非常有用,特别是当需要进行不区分大小写的比较时。 **语法结构**: ```sql UPPER(str) LOWER(str) ``` - `str`是要转换的字符串。 **示例代码**: ```sql SELECT UPPER('hello ...
但需要注意,`REPLACE()` 函数是区分大小写的,因此在处理大小写敏感的情况时要特别注意。 在实际应用中,批量替换可能涉及大量数据,因此在执行此类操作前,建议先备份数据,以防止意外的数据丢失。同时,可以先...
- 适当选择排序规则,如`_bin`用于区分大小写,`_ci`用于不区分大小写。 了解和正确设置MySQL字符集是确保数据正确存储和检索的关键,对于处理全球化数据的应用尤其重要。通过合理配置,我们可以避免乱码问题,...
这会强制查询对字符串进行二进制比较,从而区分大小写。 3. **设置字符集**: 字符集也会影响大小写敏感性。`utf8_general_ci`是一个不区分大小写的字符集,而`utf8_bin`则是区分大小写的。你可以通过`ALTER TABLE...
在默认情况下,MySQL数据库在大多数情况下对字符串进行的是不区分大小写的比较,这可能导致在某些场景下,比如用户登录验证或者特定搜索时,产生不符合预期的结果。 `BINARY`关键字在MySQL中用于类型转换,它将字符...
校对规则决定了两个字符串的比较结果,是否区分大小写,以及特定字符的排序位置等。常见的校对规则后缀有_ci(大小写不敏感)、_cs(大小写敏感)和_bin(基于字符编码的二进制比较)。 #### 二、MySQL字符集的设置...