IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> MySQL字段值大小写敏感的解决方案 -> 正文阅读

[大数据]MySQL字段值大小写敏感的解决方案

最近在用开源的MySQL 8.0开发本公司的产品,在客户现场建表时默认使用的是CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci 字符集导致与oracle的结果不一致,最后将建表时的字符集改为utf8mb3就可以了。

正常建表如下,默认使用的是CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci 字符集

[test]> CREATE TABLE t3(id int primary key, name varchar(50))engine = xxx;
Query OK, 0 rows affected (0.07 sec)

[test]> insert into t3 values(1, '123AA123'), (2, '123aa123');
Query OK, 2 rows affected (0.00 sec)
Records: 2  Duplicates: 0  Warnings: 0

[test]> show create table t3;
+-------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table                                                                                                                                                                                                   |
+-------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| t3    | CREATE TABLE "t3" (
  "id" int NOT NULL,
  "name" varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL,
  PRIMARY KEY ("id")
) ENGINE=xxx DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci |

[test]> select * from t3 where name = "123AA123";
+----+----------+
| id | name     |
+----+----------+
|  1 | 123AA123 |
|  2 | 123aa123 |
+----+----------+
2 rows in set (0.00 sec)

上面的结果导致查询有2条记录,也就是大小写不敏感,跟oracle结果不一致,oracle就一条结果。

后面经过排查要与oracle结果一致,将建表时的字符集改为utf8mb3就可以了。因为字符集utf8mb3对大小写是敏感的。

[test]> CREATE TABLE t4(id int primary key, name varchar(50))engine = xxx collate utf8_bin;
Query OK, 0 rows affected, 1 warning (0.08 sec)

[test]> show warnings;
+-------+------+-----------------------------------------------------------------------------------------------------------------------------------------------------------+
| Level | Code | Message                                                                                                                                                   |
+-------+------+-----------------------------------------------------------------------------------------------------------------------------------------------------------+
| Error | 1064 | You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'warning' at line 1 |
+-------+------+-----------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

[test]> select * from t4 where name = '123aa123';
+----+----------+
| id | name     |
+----+----------+
|  2 | 123aa123 |
+----+----------+
1 row in set (0.01 sec)

[test]> select * from t4 where name = '123AA123';
+----+----------+
| id | name     |
+----+----------+
|  1 | 123AA123 |
+----+----------+
1 row in set (0.00 sec)

但是这样导致建表时会有警告,字符集这块相当于从utf8mb4 退化到了 utf8mb3了。

还有一种方法就是建表时,默认使用utf8mb4字符集,但是建表之后立即执行:

alter table test3 modify name varchar(50) collate utf8_bin;将name列的字符集改为utf8_bin。

总结:建表时指定的字符集导致大小写不敏感导致的问题。

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-04-29 12:12:55  更:2022-04-29 12:14:56 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 0:41:27-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码