sql >> Databáze >  >> RDS >> Mysql

Ruby on Rails MySQL #08S01Špatný handshake – downgrade MySQL?

Namísto downgradu MySQL klenotu je možné opravit parametr názvu databáze a opravit "bad handshake" problém.

Našel jsem toto:https://github.com/rubygems/rubygems/issues/423 Funguje to dobře.

Místo hackování v real_connect je možné přidat "\0" v config/database.yml

production:
  database: "itsalive_production\0"
  adapter: mysql
  host: localhost
  encoding: UTF8
  ...

UPRAVIT
Pokud používáte řešení s \0 na konci názvu databáze. Pravděpodobně to zjistíte a vyřešíte sami, ale přesto to zmiňuji:
(alespoň v mé verzi Rails )
Použití databázového řetězce s \0 na konci dává problém při provádění rake test . Začíná odstraněním testovací databáze před zkopírováním definic vývojové databáze a poté použitím řetězce příkazu SQL, který obsahuje název testovací databáze. To způsobí chybu kvůli \0 uprostřed řetězce.

V mém případě používám místní vývojovou databázi, která nezpůsobuje žádný problém, takže nepotřebuji mít \0 v tomto jméně.
Zde je alternativní hack, který to vyřeší (původní kód v mysql_adapter.rb ):

module ActiveRecord
  module ConnectionAdapters
    class MysqlAdapter

      alias_method :old_execute, :execute

      def execute(sql, name = nil) #:nodoc:
        # This is needed because database names can end with "\0" to fix
        # the issue with "handshake" when mysql server is newer than the gem
        # requires. E.g. called when loading the new test db when doing "rake test".
        sql = sql.delete("\0")

        old_execute(sql, name)
      end
    end
  end
end


  1. Jak autoinkrementovat varchar

  2. Jak přidat řetězec k hodnotě sloupce v MySQL?

  3. Rails, PostgreSQL a spouštěče historie

  4. Jak velká může být databáze MySQL, než začne klesat výkon