MySQL error: The maximum column size is 767 bytes

前端 未结 10 1768
陌清茗
陌清茗 2020-12-24 15:41

When I run a program which does something with MySQL, I got this error message:

2015-06-10 15:41:12,250 ERROR app.wsutils 419 INCRON: Error: (\'HY000\

相关标签:
10条回答
  • 2020-12-24 16:12

    I had this problem because I tried to create a String primary key with varchar(254). Easy to overlook sometimes.. So double check your index type and length as well :)

    0 讨论(0)
  • 2020-12-24 16:12

    For me using Mariadb 10.1.31, just add this while you login in Mysql CLI:

    SET GLOBAL innodb_file_format = Barracuda;
    
    SET GLOBAL innodb_file_per_table = ON;
    
    SET GLOBAL innodb_large_prefix = ON;
    
    SET GLOBAL innodb_default_row_format = 'DYNAMIC';
    
    0 讨论(0)
  • 2020-12-24 16:13

    In my case (MySQL version 5.6) the issue was that I was trying to create a table with a column that can have up to 256 characters (the db uses utf8 collation), so 3 bytes per 1 utf8 character = 256*3=768 bytes. The fix was to simply have 255 characters instead of 256.

    I could also set innodb_large_prefix, like others suggest, but in my case it was easier to just have fewer symbols.

    0 讨论(0)
  • 2020-12-24 16:19

    I had the same error despite having innodb_large_prefix configured correctly.

    The issue was in used collation. My db had default collation set to utf8mb4_bin (you can check it in phpmyadmin "Operations" tab for database). It means it uses 4 bytes per char, while utf8 collation (e.g. utf8_unicode_ci) uses 3 bytes per char.

    in this case you can either use different collation e.g. by adding DEFAULT CHARSET=utf8 at the end of the CREATE TABLE statement, or limit the index size by using just a part of the column value like KEY 'identifier' (column1(5),column2(10)).

    See also related question: #1071 - Specified key was too long; max key length is 767 bytes

    0 讨论(0)
  • 2020-12-24 16:20

    I was using MariaDB version 10.1.38 and used all of the below given commands but it did not work -

    set global innodb_large_prefix = ON;
    Query OK, 0 rows affected (0.00 sec)
    
    set global innodb_file_per_table = ON;
    Query OK, 0 rows affected (0.00 sec)
    
    set global innodb_file_format = Barracuda;
    Query OK, 0 rows affected (0.00 sec)
    
    SET GLOBAL innodb_default_row_format = 'DYNAMIC';
    

    Because after you restart your MySQL (or MariaDB), these settings will not reflect back using the command at the mysql prompt: show variables like 'innodb%';

    Then I edited My.ini and added these settings in the file at below location- C:\xampp\mysql\bin\my.ini

    ## Innodb settings to bypass error of max size 737
    innodb-file-format=barracuda
    innodb-file-per-table=ON
    innodb-large-prefix=ON
    ## Above 3 didnot work so i added below
    innodb_default_row_format = 'DYNAMIC'
    

    source:https://www.experts-exchange.com/questions/28675824/Why-am-I-unable-to-turn-innodb-large-prefix-ON-successfully-Every-time-I-reboot-mySql-on-my-Ubuntu-VPS-it-resets-to-OFF.html

    0 讨论(0)
  • 2020-12-24 16:25

    Just add the following options to my.cnf

    [mysqld]
    innodb_file_format=Barracuda
    innodb_file_per_table=1
    innodb_large_prefix=1
    

    Then, restart mysql server the problem will be resolved.

    0 讨论(0)
提交回复
热议问题