查看mysql表结构和表创建语句的方法,建表42000错误解决办法

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

drop table if exists test;  
create table test(test varchar(767) primary key)charset=latin5;  -- 成功 
drop table if exists test; 

create table test(test varchar(768) primary key)charset=latin5;  -- 错误
-- ERROR 1071 (42000): Specified key was too long; max key length is 767 bytes

 
drop table if exists test; 
create table test(test varchar(383) primary key)charset=GBK;  -- 成功 
drop table if exists test; 

create table test(test varchar(384) primary key)charset=GBK;  -- 错误
 -- ERROR 1071 (42000): Specified key was too long; max key length is 767 bytes 


drop table if exists test;  
create table test(test varchar(255) primary key)charset=UTF8;  -- 成功 
drop table if exists test;
create table test(test varchar(256) primary key)charset=UTF8;  -- 错误  
-- ERROR 1071 (42000): Specified key was too long; max key length is 767 bytes 

 MySQL的varchar主键只支持不超过768个字节 或者 768/2=384个双字节 或者 768/3=256个三字节的字段 ,而 GBK是双字节的,UTF-8是三字节的。

MySQL ERROR 1071 (42000): Specified key was too long; max key length is 767 bytes 的原因分析

查看mysql表结构的方法有三种:  

1、mysql> desc tablename;  # 查看表的结构

+------------------+---------------------+------+-----+---------------------+----------------+  
| Field            | Type                | Null | Key | Default             | Extra          |  
+------------------+---------------------+------+-----+---------------------+----------------+  
| id               | int(11)             | NO   | PRI | NULL                | auto_increment |  
| title            | text                | NO   |     | NULL                |                |  
| content          | text                | NO   |     | NULL                |                |  
| ordering         | int(11)             | NO   |     | 0                   |                |  
| position         | varchar(50)         | YES |     | NULL                |                |  
| checked_out      | int(11) unsigned    | NO   |     | 0                   |                |  
| checked_out_time | datetime            | NO   |     | 0000-00-00 00:00:00 |                |  
| published        | tinyint(1)          | NO   | MUL | 0                   |                |  
| module           | varchar(50)         | YES | MUL | NULL                |                |  
| numnews          | int(11)             | NO   |     | 0                   |                |  
| access           | tinyint(3) unsigned | NO   |     | 0                   |                |  
| showtitle        | tinyint(3) unsigned | NO   |     | 1                   |                |  
| params           | text                | NO   |     | NULL                |                |  
| iscore           | tinyint(4)          | NO   |     | 0                   |                |  
| client_id        | tinyint(4)          | NO   |     | 0                   |                |  
| control          | text                | NO   |     | NULL                |                |  
+------------------+---------------------+------+-----+---------------------+----------------+  

2、mysql> show create table tablename;  # 查看创建表的sql语句

  1. mysql> show create table jos_modules;  
  2. jos_modules | CREATE TABLE `jos_modules` (  
  3. `id` int(11) NOT NULL AUTO_INCREMENT,  
  4. `title` text NOT NULL,  
  5. `content` text NOT NULL,  
  6. `ordering` int(11) NOT NULL DEFAULT '0',  
  7. `position` varchar(50) DEFAULT NULL,  
  8. `checked_out` int(11) unsigned NOT NULL DEFAULT '0',  
  9. `checked_out_time` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',  
  10. `published` tinyint(1) NOT NULL DEFAULT '0',  
  11. `module` varchar(50) DEFAULT NULL,  
  12. `numnews` int(11) NOT NULL DEFAULT '0',  
  13. `access` tinyint(3) unsigned NOT NULL DEFAULT '0',  
  14. `showtitle` tinyint(3) unsigned NOT NULL DEFAULT '1',  
  15. `params` text NOT NULL,  
  16. `iscore` tinyint(4) NOT NULL DEFAULT '0',  
  17. `client_id` tinyint(4) NOT NULL DEFAULT '0',  
  18. `control` text NOT NULL,  
  19. PRIMARY KEY (`id`),  
  20. KEY `published` (`published`,`access`),  
  21. KEY `newsfeeds` (`module`,`published`)  
  22. ) ENGINE=MyISAM AUTO_INCREMENT=145 DEFAULT CHARSET=utf8  

3、mysql>select COLUMN_NAME from information_schema.COLUMNS where table_name = 'tablename' and TABLE_SCHEMA ='databasename';

     # 查看列名

  1. +----------------------------+
  2. | COLUMN_NAME                
  3. +----------------------------+
  4. | id                                           
  5. | distinct_name                     
  6. | offical_domain                     
  7. | offical_ip                             
  8. | offical_ip_loc                      
  9. | similar_domain_regex         
  10. | title_keywords                      
  11. | content_sensitive_keywords
  12. | out_link_offical_rate            
  13. | icp_code                            
  14. | reserved_one                     
  15. | reserved_two                    
  16. | reserved_three                  
  17. | update_time                       
  18. +----------------------------+

  

原文地址:https://www.cnblogs.com/domestique/p/7860570.html