Подтвердить что ты не робот

Изменение столбца таблицы Mysql для чувствительности к регистру

У меня есть таблица в моей базе данных Mysql, которая используется для аутентификации. И теперь мне нужно сделать регистр аутентификации чувствительным. Я понял, что столбцы Mysql не учитывают регистр (в отличие от Oracle) для операций поиска, и поведение по умолчанию может быть изменено при создании таблицы, указав "двоичный", т.е.

CREATE TABLE USERS
(
    USER_ID SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT,
    USER_NAME VARCHAR(50) BINARY NOT NULL
)

Может кто-нибудь, пожалуйста, скажите мне, как изменить таблицу в Mysql, чтобы добавить "Двоичный" в существующий столбец БД?

Спасибо!

4b9b3361

Ответ 1

ALTER TABLE USERS CHANGE USER_NAME USER_NAME VARCHAR(50) BINARY NOT NULL;

Ответ 2

См. 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. Я бы посоветовал вам немного сравнить, ваш пробег может варьироваться в зависимости от ваших фактических данных и запросов, которые вам нужно выполнить.

Ответ 3

Вы должны сделать что-то вроде этого:

Изменить: Неправильно то, что вы намеревались сделать:

ALTER TABLE USERS MODIFY
    USER_NAME VARCHAR(50)
      CHARACTER SET latin1
      COLLATE latin1_bin;

Ответ 4

Вместо того, чтобы изменять таблицу, вы можете выполнять запросы с учетом регистра в своей таблице при аутентификации, используйте опцию BINARY следующим образом:

SELECT BINARY * FROM USERS where USER_ID = 2 AND USER_NAME = 'someone' LIMIT 1;

Помогает ли это?