Skip to main content
The database schema lives entirely in sql/. Each table has its own .sql file. The schema uses utf8mb4 / utf8mb4_general_ci throughout. There are roughly 130 tables, organized into the functional groups below.
Tables that store player account data, authentication, and session state.
Tables that store everything about a player character. These are the “protected” tables that dbtool.py never overwrites during updates.
Static game data tables describing all item types. These are imported from source SQL and are not player data.
Tables that define monsters, NPCs, and their behaviors.
Tables that define world geography, routing, and zone configuration.
Tables covering magic, abilities, and job-specific systems.
Tables for the auction house, shops, and crafting systems.
Tables for server-wide state, economy control, and GM audit logging.
Tables for leveling, skill progression, and experience tables.
Tables for the fishing system.

Protected tables

The following tables contain player data and are never overwritten by dbtool.py update. They are only imported during a fresh database setup (when the table doesn’t yet exist): accounts, accounts_banned, accounts_totp, auction_house, auction_house_items, audit_bazaar, audit_dbox, audit_trade, audit_vendor, char_blacklist, char_chocobos, char_effects, char_equip, char_equip_saved, char_exp, char_fishing_contest_history, char_flags, char_history, char_inventory, char_jobs, char_job_points, char_look, char_merit, char_monstrosity, char_pet, char_points, char_profile, char_skills, char_spells, char_stats, char_storage, char_style, char_unlocks, char_vars, chars, conquest_system, delivery_box, fishing_contest, fishing_contest_entries, help_desk, ip_exceptions, linkshells, server_variables, unity_system.