【问题标题】:How to make mysql difference between between uppercase and lowercasemysql如何区分大写和小写
【发布时间】:2014-07-19 15:49:08
【问题描述】:

我需要mysql中的一些东西来区分查询中的大写和小写。

因为我需要在我的 java 程序中选择用户名。

我试过了:

  • 数据库名称utf8
  • 表名是user_table

查询:

create table user_table (id int, name varchar(30));

insert into a user_table (1, "zdi0"), (2, "ZDI0");

ALTER DATABASE utf8 CHARACTER SET utf8 COLLATE utf8_unicode_ci;

ALTER TABLE user_table CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;

select * 
from a 
where name = "ZDI0" ; 

结果:

1  zdi0
2  ZDI0

我需要更改表而不是查询

提前致谢

【问题讨论】:

  • thanx @R Mac 但这适用于数据库中的一个表,但我在数据库中有多个表并且我有错误说:错误代码:1025。重命名'.\pind_try\时出错#sql-85c_aa' 到 '.\pind_try\profile' (errno: 150)

标签: mysql utf-8 uppercase alter-table lowercase


【解决方案1】:

排序规则 utf8_unicode_ci 不区分大小写。如果要使用 utf8 排序规则并支持区分大小写,则需要使用 utf8_bin,但 utf8_bin 是二进制排序规则方案。在决定使用它之前,您应该阅读它。不幸的是,据我所知,utf8_bin 是 MySQL 目前唯一可用的区分大小写的 utf8 排序规则。

【讨论】:

  • 这适用于数据库中的一个表,但我在数据库中有多个表,并且我有错误说:错误代码:1025。重命名“.\pind_try\#sql-85c_aa”时出错到 '.\pind_try\profile' (errno: 150)
【解决方案2】:

如果您想比较精确大小写的值,可以使用'binary' 函数。

示例:

mysql> select ( @U := 'Ravinder' ) = ( @L := 'ravinder' ) as `true`
    ->      , @U=binary( @L ) as `false`;
+------+-------+
| true | false |
+------+-------+
|    1 |     0 |
+------+-------+

无论排序规则是什么,此用法都会对完全匹配进行显式比较。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-03-06
    • 1970-01-01
    • 2020-02-18
    • 1970-01-01
    • 1970-01-01
    • 2020-04-08
    • 2017-06-16
    • 1970-01-01
    相关资源
    最近更新 更多