[RUBY] [Erreur] Mysql2 :: Erreur: la clé spécifiée était trop longue; la longueur maximale de la clé est de 767 octets

Mémorandum d'erreur

contenu de l'erreur

Quand j'ai fait rails db: migrate, j'ai eu la déclaration d'erreur suivante. (Erreur MySQL)

Mysql2::Error: Specified key was too long; max key length is 767 bytes

L'erreur est «La clé spécifiée est trop longue». L'ajout de plusieurs colonnes à la table dépasserait la limite de clé de 767 octets. Cette erreur se produira.

Cause

config/database.yml


  default: &default
  adapter: mysql2
  encoding: utf8mb4
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  username: root
  password:
  socket: /tmp/mysql.sock

J'obtiens une erreur à cause de la description ʻencoding: utf8mb4`.

Solution

Réécrire en ʻencoding: utf8`.

config/database.yml


  default: &default
  adapter: mysql2
  encoding: utf8
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  username: root
  password:
  socket: /tmp/mysql.sock

Je ne connais pas la différence entre utf8mb4 et utf8, mais il semble que utf8mb4 peut stocker 1 à 4 octets et utf8 peut stocker 1 à 3 octets. Par conséquent, avec utf8, les pictogrammes ne peuvent pas être enregistrés, mais la capacité peut augmenter à la place. J'ai deviné.

Si vous avez déjà créé la base de données avec rails db: create

% rails db:drop
% rails db:create

Ou

% rails db:reset

Nous devons donc recréer à nouveau la base de données.

en conclusion

Si vous avez des erreurs, je vous serais reconnaissant de bien vouloir le signaler. Merci pour la lecture!

Recommended Posts

[Erreur] Mysql2 :: Erreur: la clé spécifiée était trop longue; la longueur maximale de la clé est de 767 octets
[Mysql2] Mysql2 :: Erreur: La clé spécifiée était trop longue; la longueur maximale de la clé est de 767 octets → Résolu en créant un nouveau fichier avec des restrictions de caractères
Erreur SQL [08001]: la solution de contournement pour la récupération de clé publique n'est pas autorisée [JDBC: MySQL]