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”中使用,卡在其他内容中。