【问题标题】:How can I modify the size of Primary Key column of Varchar in a MariaDB table?如何修改 MariaDB 表中 Varchar 的主键列的大小?
【发布时间】:2018-10-01 07:35:28
【问题描述】:

我有

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

我的表描述:

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 的 Column 长度为 varchar(999)

跑步

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
  • 现在我想修改UserID的Column长度为varchar(999)
  • 999 对于索引列来说太长了。最大 255也使用int 而不是varchar(...)
  • UserID 不能是整数。让我试试 255
  • MariaDB [GTX_CC]> ALTER TABLE SubscribedUser MODIFY UserID varchar(255) NOT NULL ; ERROR 1833 (HY000): Cannot change column 'UserID': used in a foreign key constraint 'fk_Session_SubscribedUser1' of table 'GTX_CC.UserSession' 现在,卡在其他事情上。

标签: sql mariadb


【解决方案1】:

脚本如下:

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。

【讨论】:

    【解决方案2】:

    怎么回事,好像和这个问题有关:MariaDB won't create table with large VARCHAR as PRIMARY KEY

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

    【讨论】:

      【解决方案3】:

      请提供SHOW CREATE TABLE SubscribedUser。我质疑那个“描述”是否正确。应该不可能将VARCHAR 用作AUTO_INCREMENT无论长度如何

      决定您希望PRIMARY KEYAUTO_INCREMENT 还是VARCHAR

      如果你选择有VARCHAR,那么想想什么尺寸是合理的。

      如果您需要索引大的VARCHAR,请参阅http://mysql.rjweb.org/doc.php/limits#767_limit_in_innodb_indexes 了解您的选项。

      【讨论】:

        猜你喜欢
        • 2018-05-11
        • 2010-11-19
        • 2020-08-02
        • 2017-02-08
        • 2019-02-21
        • 2015-03-11
        • 2010-09-15
        • 1970-01-01
        • 2014-05-05
        相关资源
        最近更新 更多