首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mysql,空格等于空字符串。

mysql,空格等于空字符串。
EN

Stack Overflow用户
提问于 2016-01-14 05:56:05
回答 2查看 3K关注 0票数 15

我花了两个小时来解决后端的一个问题。

原因是空字符串等于空格:

代码语言:javascript
复制
SELECT ' ' = '';
-> 1

SELECT STRCMP(' ', '');
-> 0 /* means equal */

有趣的是,

代码语言:javascript
复制
SELECT '' REGEXP '[ ]';
-> 0
SELECT '' REGEXP ' ';
-> 0
SELECT ' ' REGEXP ' ';
-> 1

我能阻止这一切吗?这是一个背景吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-01-14 06:02:11

这个失败的原因在这里的文档中得到了解释-- http://dev.mysql.com/doc/refman/5.0/en/char.html

根据分配给该列的字符集排序规则对CHAR和VARCHAR列中的值进行排序和比较。 所有MySQL排序规则都是PADSPACE类型的。这意味着对MySQL中的所有CHAR、VARCHAR和TEXT值进行比较,而不考虑任何尾随空格。此上下文中的“比较”不包括类似的模式匹配运算符,对于该运算符,尾随空格非常重要。

解决这一问题的一种方法是将其转换为BINARY

代码语言:javascript
复制
SELECT BINARY '' = ' ';
0

您也可以使用LIKE

代码语言:javascript
复制
SELECT '' LIKE ' ';
0
票数 14
EN

Stack Overflow用户

发布于 2018-12-29 19:18:34

我不是一个普通的MySQL用户,但我的MariaDB 10.2.9也有这个问题。我通过将VARCHAR列排序规则从utf8mb4_unicode_ci更改为utf8mb4_unicode_nopad_ci来解决这个问题。

SELECT '' = ' ' COLLATE utf8mb4_unicode_ci;

结果:1

SELECT '' = ' ' COLLATE utf8mb4_unicode_nopad_ci;

结果:0

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34782594

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档