Как я могу изменить размер столбца первичного ключа Varchar в таблице MariaDB? - PullRequest
0 голосов
/ 01 октября 2018

У меня есть

Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 5
Server version: 10.0.36-MariaDB-0ubuntu0.16.04.1 Ubuntu 16.04

Моя таблица desc:

MariaDB [GTX_CC]> desc SubscribedUser;
+---------------------------------------------+--------------+------+-----+---------+-------+
| Field                                       | Type         | Null | Key | Default | Extra |
+---------------------------------------------+--------------+------+-----+---------+-------+
| UserID                                      | varchar(25)  | NO   | PRI | NULL    |       |
| UserName                                    | varchar(100) | YES  |     | NULL    |       |
| UserStatusCode                              | varchar(10)  | NO   |     | NULL    |       |
| Password                                    | varchar(512) | NO   |     | NULL    |       |

Теперь я хочу изменить длину столбца UserID для varchar (999)

Running

MariaDB [GTX_CC]> ALTER TABLE SubscribedUser MODIFY UserID  varchar(999) NOT NULL  AUTO_INCREMENT;

выдает следующую ошибку:

ERROR 1063 (42000): Incorrect column specifier for column 'UserID'

Добавлено>

Я также пробовал:

MariaDB [GTX_CC]> ALTER TABLE SubscribedUser MODIFY UserID  varchar(999) NOT NULL ;

Также выдает ошибку как:

ERROR 1071 (42000): Specified key was too long; max key length is 767 bytes

Также пробовали следующим образом:

MariaDB [GTX_CC]> ALTER TABLE SubscribedUser MODIFY UserID  varchar(767) NOT NULL ;
ERROR 1071 (42000): Specified key was too long; max key length is 767 bytes
MariaDB [GTX_CC]> ALTER TABLE SubscribedUser MODIFY UserID  varchar(766) NOT NULL ;
ERROR 1071 (42000): Specified key was too long; max key length is 767 bytes
MariaDB [GTX_CC]> 

Что не так в моем утверждении?Любая помощь, пожалуйста?

Ответы [ 3 ]

0 голосов
/ 01 октября 2018

Сценарий будет выглядеть следующим образом:

LOCK TABLES 
UserSession WRITE,
SubscribedUser WRITE;

ALTER TABLE UserSession
DROP FOREIGN KEY fk_Session_SubscribedUser1,
MODIFY SubscribedUser_UserID varchar(255) NOT NULL;

ALTER TABLE SubscribedUser MODIFY UserID  varchar(255) NOT NULL ;

ALTER TABLE UserSession
ADD CONSTRAINT fk_Session_SubscribedUser1 FOREIGN KEY (SubscribedUser_UserID)
REFERENCES SubscribedUser (UserID);

UNLOCK TABLES;

Максимально допустимая длина символа в varchar составляет только 255.

0 голосов
/ 12 октября 2018

Пожалуйста, укажите SHOW CREATE TABLE SubscribedUser.Я спрашиваю, правильно ли это «описание».Должно быть невозможным иметь VARCHAR как AUTO_INCREMENT, независимо от длины .

Решите, хотите ли вы, чтобы PRIMARY KEY было AUTO_INCREMENT или VARCHAR.

Если вы выбрали VARCHAR, подумайте, какой размер является разумным.

Если вам нужно проиндексировать большое значение VARCHAR, см. http://mysql.rjweb.org/doc.php/limits#767_limit_in_innodb_indexesдля вариантов у вас есть.

0 голосов
/ 01 октября 2018

Что не так, похоже, связано с этим вопросом: MariaDB не будет создавать таблицу с большим VARCHAR в качестве PRIMARY KEY .

В итоге, и не желая повторять сказанноев приведенной выше ссылке указана максимальная длина первичных ключей varchar, а ограничение зависит от кодировки.Чтобы убедиться в этом, отбросьте первичный ключ (alter table SubscribedUser drop primary key), измените длину идентификатора пользователя на 999 (это успешно), попробуйте добавить идентификатор пользователя в качестве первичного ключа (alter table SubscribedUser add primary key(userid)), и он завершится ошибкой с той же ошибкой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...