Sql 如何修改MariaDB表中Varchar主键列的大小?

Sql 如何修改MariaDB表中Varchar主键列的大小?,sql,mariadb,Sql,Mariadb,我有 我的表格说明: 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 现在我想将UserID的列长度修改为varchar(999) 运行 MariaDB [GTX_CC]> desc SubscribedUser; +-------

我有

我的表格说明:

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

现在我想将UserID的列长度修改为varchar(999)

运行

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    |       |
给出以下错误:

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]> 

我的陈述有什么错?有什么帮助吗?

问题出在哪里,似乎与此问题有关:


总之,不想重复上面链接中的内容,varchar主键有一个最大长度,限制取决于字符集。要验证这一点,请删除主键(
alter table SubscribedUser drop primary key
),将userid的长度更改为999(成功),尝试将userid添加为主键(
alter table SubscribedUser add primary key(userid)
),它将失败,并出现相同的错误。

脚本如下:

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]> 

varchar下允许的最大字符长度仅为255。

请提供
SHOW CREATE TABLE SubscribedUser
。我怀疑这个“描述”是否正确。无论长度如何,都不可能将
VARCHAR
作为
自动增量

决定是要将
主键
设置为
自动增量
还是
变量字符

如果选择使用
VARCHAR
,请考虑合理的大小


如果您需要为大型
VARCHAR
编制索引,请参阅以获取您的选项。

您在这里想做什么?如果您想要自动递增,那么不要使用
varchar
现在我想将UserID的列长度修改为varchar(999)999对于索引列来说太长。255是最大值。也使用
int
而不是
varchar(…)
UserID不能是int。让我尝试使用255MariaDB[GTX_CC]>ALTER TABLE SubscribedUser MODIFY UserID varchar(255)NOT NULL;错误1833(HY000):无法更改列“UserID”:现在在表“GTX_CC.UserSession”的外键约束“fk_Session_SubscribedUser1”中使用,卡在其他内容中。