• ADADADADAD

    如何解决Mysql数据库中sql语句的where条件中文本匹配问题[ mysql数据库 ]

    mysql数据库 时间:2024-11-26 22:16:39

    作者:文/会员上传

    简介:

    Mysql数据库中sql语句中where条件中文本匹配问题问题描述字段name类型为varchar时(CHAR,VARCHAR和TEXT情况都一样),语句一select * from aaa where name='a';语句二se

    以下为本文的正文内容,内容仅供参考!本站为公益性网站,复制本文以及下载DOC文档全部免费。

    Mysql数据库中sql语句中where条件中文本匹配问题

    问题描述

    字段name类型为varchar时(CHAR,VARCHAR和TEXT情况都一样),

    语句一

    select * from aaa where name='a';

    语句二

    select * from aaa where name='a ' ;

    结果一样:不能区分末尾是否有空格,

    建议:

    1、如果必须精确匹配(包括大小写和末尾空格)建议转换成二进制比较,使用select * from aaa where name=BINARY'a ' ;

    2、如果需要精确校验末尾是否有空格,但是保留大小写模糊匹配(默认校对规则_ci大小写不敏感),建议增加length(name)就可以比较出长度来区分

    3、如果需要精确校验大小写,但是保留末尾空格忽略,可以使用select *from aaa where name='a'collate utf8_cs;(字符为utf8)

    4、默认设置情况下,

    a、where name='a';

    b、where name='a ';(末尾有空格)

    c、where name='A';

    b、where name='A ';(末尾有空格)

    四中情况匹配的结果是一样的,

    经查询官方文档:

    所有MySQL归类都是PAD SPACE类型。 这意味着所有CHAR,VARCHAR和TEXT值都会进行比较,而不考虑任何尾随空格。 在此上下文中的“比较”不包括LIKE模式匹配运算符,其尾部空格是重要的。 例如:

    mysql>CREATE TABLE names (myname CHAR(10));

    Query OK, 0 rows affected (0.03 sec)

    mysql> INSERT INTO names VALUES ('Monty');

    Query OK, 1 row affected (0.00 sec)

    mysql> SELECT myname = 'Monty', myname = 'Monty ' FROM names; +------------------+--------------------+

    | myname = 'Monty' | myname = 'Monty ' |

    +------------------+--------------------+

    | 1 | 1 |

    +------------------+--------------------+

    1 row in set (0.00 sec)

    mysql> SELECT myname LIKE 'Monty', myname LIKE 'Monty ' FROM names; +---------------------+-----------------------+ |

    myname LIKE 'Monty' | myname LIKE 'Monty ' |

    +---------------------+-----------------------+

    | 1 | 0 |

    +---------------------+-----------------------+

    1 row in set (0.00 sec)

    对于所有MySQL版本都是如此,并且不受服务器SQL模式的影响。

    注意

    有关MySQL字符集和归类的更多信息,请参阅第10章,字符集,归类,Unicode。 有关存储要求的更多信息,请参见第11.7节“数据类型存储要求”。

    对于尾随填充字符被去除或比较忽略它们的情况,如果列的索引需要唯一值,则插入到仅与尾部填充字符数不同的列值中将导致重复键错误。 例如,如果一个表包含'a',则尝试存储'a'会导致重复键错误。

    热门标签: mysqlsqlwhere