我的Mysql数据库中有一个表,用于身份验证。现在,我需要使身份验证案例敏感。 谷歌搜索,我已经意识到Mysql列对于搜索操作不区分大小写(与Oracle相反),并且在创建表时可以通过指定“二进制”来更改默认行为,即。
CREATE TABLE USERS
(
USER_ID SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT,
USER_NAME VARCHAR(50) BINARY NOT NULL
)
有人可以告诉我如何更改Mysql中的表以将“二进制”添加到数据库的现有列中吗?
谢谢!
答案 0 :(得分:31)
ALTER TABLE USERS CHANGE USER_NAME USER_NAME VARCHAR(50) BINARY NOT NULL;
答案 1 :(得分:7)
请参阅http://dev.mysql.com/doc/refman/5.0/en/charset-conversion.html
示例:
ALTER TABLE some_table MODIFY some_column BLOB;
ALTER TABLE some_table MODIFY some_column VARCHAR(50) BINARY;
第一行转换为二进制数据类型(尝试最小化字符丢失),第二行转换回VARCHAR
类型并进行BINARY
整理。
实际上,最好将其存储为二进制类型之一(BLOB
,BINARY
或VARBINARY
),而不是简单地整理BINARY
。我建议你稍微比较,你的里程可能会有所不同,具体取决于你的实际数据和你需要运行的查询。
答案 2 :(得分:4)
你应该可以这样做:
编辑:误读您打算做的事情:
ALTER TABLE USERS MODIFY
USER_NAME VARCHAR(50)
CHARACTER SET latin1
COLLATE latin1_bin;
答案 3 :(得分:-1)
在进行身份验证时,您仍然可以在表上执行区分大小写的查询,而不是更改表,使用BINARY选项,如下所示:
SELECT BINARY * FROM USERS where USER_ID = 2 AND USER_NAME = 'someone' LIMIT 1;
这有帮助吗?