Ответ 1
ALTER TABLE USERS CHANGE USER_NAME USER_NAME VARCHAR(50) BINARY NOT NULL;
У меня есть таблица в моей базе данных Mysql, которая используется для аутентификации. И теперь мне нужно сделать регистр аутентификации чувствительным. Я понял, что столбцы Mysql не учитывают регистр (в отличие от Oracle) для операций поиска, и поведение по умолчанию может быть изменено при создании таблицы, указав "двоичный", т.е.
CREATE TABLE USERS
(
USER_ID SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT,
USER_NAME VARCHAR(50) BINARY NOT NULL
)
Может кто-нибудь, пожалуйста, скажите мне, как изменить таблицу в Mysql, чтобы добавить "Двоичный" в существующий столбец БД?
Спасибо!
ALTER TABLE USERS CHANGE USER_NAME USER_NAME VARCHAR(50) BINARY NOT NULL;
См. 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
. Я бы посоветовал вам немного сравнить, ваш пробег может варьироваться в зависимости от ваших фактических данных и запросов, которые вам нужно выполнить.
Вы должны сделать что-то вроде этого:
Изменить: Неправильно то, что вы намеревались сделать:
ALTER TABLE USERS MODIFY
USER_NAME VARCHAR(50)
CHARACTER SET latin1
COLLATE latin1_bin;
Вместо того, чтобы изменять таблицу, вы можете выполнять запросы с учетом регистра в своей таблице при аутентификации, используйте опцию BINARY следующим образом:
SELECT BINARY * FROM USERS where USER_ID = 2 AND USER_NAME = 'someone' LIMIT 1;
Помогает ли это?