I wanted to create a session table with a unique index, but when the index was created, I encountered with this error with key limitation. Can you help me to create this table with these two indexes?
migration file
def change
create_table :sessions do |t|
t.string :session_id, :null => false
t.text :data
t.timestamps
end
add_index :sessions, :session_id, :unique => true
add_index :sessions, :updated_at
end
error message
== 20240814053256 AddSessionsTable: migrating =================================
-- create_table(:sessions)
-> 0.1219s
-- add_index(:sessions, :session_id, {:unique=>true})
rails aborted!
StandardError: An error has occurred, all later migrations canceled:
Mysql2::Error: Specified key was too long; max key length is 767 bytes: CREATE UNIQUE INDEX `index_sessions_on_session_id` ON `sessions` (`session_id`)
/home/antonivanov/projects/pay/db/migrate/20240814053256_add_sessions_table.rb:9:in `change'
/home/antonivanov/projects/pay/bin/rails:9:in `require'
/home/antonivanov/projects/pay/bin/rails:9:in `<top (required)>'
/home/antonivanov/projects/pay/bin/spring:15:in `<top (required)>'
bin/rails:3:in `load'
bin/rails:3:in `<main>'
Caused by:
ActiveRecord::StatementInvalid: Mysql2::Error: Specified key was too long; max key length is 767 bytes: CREATE UNIQUE INDEX `index_sessions_on_session_id` ON `sessions` (`session_id`)
/home/antonivanov/projects/pay/db/migrate/20240814053256_add_sessions_table.rb:9:in `change'
/home/antonivanov/projects/pay/bin/rails:9:in `require'
/home/antonivanov/projects/pay/bin/rails:9:in `<top (required)>'
/home/antonivanov/projects/pay/bin/spring:15:in `<top (required)>'
bin/rails:3:in `load'
bin/rails:3:in `<main>'
Caused by:
Mysql2::Error: Specified key was too long; max key length is 767 bytes
/home/antonivanov/projects/pay/db/migrate/20240814053256_add_sessions_table.rb:9:in `change'
/home/antonivanov/projects/pay/bin/rails:9:in `require'
/home/antonivanov/projects/pay/bin/rails:9:in `<top (required)>'
/home/antonivanov/projects/pay/bin/spring:15:in `<top (required)>'
bin/rails:3:in `load'
bin/rails:3:in `<main>'
Tasks: TOP => db:migrate
(See full trace by running task with --trace)
Additional info
- mysql-server: Version: 8.0.39-0ubuntu0.20.04.1
- rails version: 5.1.4
- ruby version: 2.4.2
1