import script¶
import frappe
def create_custom_doctypes():
doctypes = [
{
"name": "D16__c",
"module": "Salesforce",
"fields": [
{"fieldname": "api_name_1", "label": "Api Name 1", "fieldtype": "Data", "length": 1000},
{"fieldname": "api_name_2", "label": "Api Name 2", "fieldtype": "Data", "length": 1000},
{"fieldname": "api_name_3", "label": "Api Name 3", "fieldtype": "Data", "length": 1000},
{"fieldname": "api_name_4", "label": "Api Name 4", "fieldtype": "Data", "length": 1000},
{"fieldname": "api_name_5", "label": "Api Name 5", "fieldtype": "Data", "length": 1000},
{"fieldname": "api_name_6", "label": "Api Name 6", "fieldtype": "Data", "length": 1000},
{"fieldname": "api_name_7", "label": "Api Name 7", "fieldtype": "Data", "length": 1000},
{"fieldname": "api_name_8", "label": "Api Name 8", "fieldtype": "Data", "length": 1000},
{"fieldname": "api_name_9", "label": "Api Name 9", "fieldtype": "Data", "length": 1000},
{"fieldname": "api_name_10", "label": "Api Name 10", "fieldtype": "Data", "length": 1000},
{"fieldname": "api_name_11", "label": "Api Name 11", "fieldtype": "Data", "length": 1000},
{"fieldname": "api_name_12", "label": "Api Name 12", "fieldtype": "Data", "length": 1000},
{"fieldname": "api_name_13", "label": "Api Name 13", "fieldtype": "Data", "length": 1000},
{"fieldname": "api_name_14", "label": "Api Name 14", "fieldtype": "Data", "length": 1000},
{"fieldname": "api_name_15", "label": "Api Name 15", "fieldtype": "Data", "length": 1000},
{"fieldname": "api_name_16", "label": "Api Name 16", "fieldtype": "Data", "length": 938} # 938 -> 937
]
}
]
for doctype in doctypes:
doc = frappe.get_doc({
"doctype": "DocType",
"name": doctype["name"],
"module": doctype["module"],
"custom": 1,
"fields": doctype["fields"]
})
doc.insert()
print(f"Created DocType: {doctype['name']}")
create_custom_doctypes()
ERROR:
OperationalError: (1118, 'Row size too large. The maximum row size for the used table type, not counting BLOBs, is 65535. This includes storage overhead, check the manual. You have to change some columns to TEXT or BLOBs')
- The maximum size of a VARCHAR field in MySQL/MariaDB is 65,535 bytes (not characters).
- The number of characters you can store depends on the character set and encoding (e.g., utf8 uses up to 3 bytes per character, utf8mb4 uses up to 4 bytes per character).
- For a single column, you can store around 16,383(=65535/4) characters in VARCHAR with utf8mb4.
describe table¶
bench mariadb
SHOW TABLES;
DESCRIBE `tabD18__c`;
SELECT * FROM `tabD18__c`;
MariaDB [dev]> DESCRIBE `tabD18__c`;
+-------------+---------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------------+---------------+------+-----+---------+-------+
| name | varchar(140) | NO | PRI | NULL | |
| creation | datetime(6) | YES | | NULL | |
| modified | datetime(6) | YES | MUL | NULL | |
| modified_by | varchar(140) | YES | | NULL | |
| owner | varchar(140) | YES | | NULL | |
| docstatus | int(1) | NO | | 0 | |
| idx | int(8) | NO | | 0 | |
| api_name_1 | varchar(1000) | YES | | NULL | |
| api_name_2 | varchar(1000) | YES | | NULL | |
| api_name_3 | varchar(1000) | YES | | NULL | |
| api_name_4 | varchar(1000) | YES | | NULL | |
| api_name_5 | varchar(1000) | YES | | NULL | |
| api_name_6 | varchar(1000) | YES | | NULL | |
| api_name_7 | varchar(1000) | YES | | NULL | |
| api_name_8 | varchar(1000) | YES | | NULL | |
| api_name_9 | varchar(1000) | YES | | NULL | |
| api_name_10 | varchar(1000) | YES | | NULL | |
| api_name_11 | varchar(1000) | YES | | NULL | |
| api_name_12 | varchar(1000) | YES | | NULL | |
| api_name_13 | varchar(1000) | YES | | NULL | |
| api_name_14 | varchar(1000) | YES | | NULL | |
| api_name_15 | varchar(1000) | YES | | NULL | |
| api_name_16 | varchar(937) | YES | | NULL | |
| _user_tags | text | YES | | NULL | |
| _comments | text | YES | | NULL | |
| _assign | text | YES | | NULL | |
| _liked_by | text | YES | | NULL | |
+-------------+---------------+------+-----+---------+-------+
27 rows in set (0.001 sec)
MariaDB [dev]> DESCRIBE `tabD3__c`;
ERROR 1146 (42S02): Table 'dev.tabD3__c' doesn't exist
MariaDB [dev]> SHOW TABLE STATUS LIKE 'tabD18__c';
- Engine: InnoDB
- Collation: utf8mb4_unicode_ci
- Data_length: 16384
- Index_length: 16384
- 16,383(=65535/4) characters in VARCHAR with utf8mb4
- 140+6+6+140+140+1+8+1000*15+4=15445
- 16383-15445=938
- 140+6+6+140+140+1+8+1000*15+937+4=16382