sql >> Database >  >> RDS >> Mysql

Ruby on Rails MySQL #08S01Slechte handdruk - MySQL downgraden?

In plaats van MySQL-edelsteen te downgraden, is het mogelijk om de parameter databasenaam te repareren om de "bad handshake" te herstellen probleem.

Ik vond dit:https://github.com/rubygems/rubygems/issues/423 Het werkt goed.

In plaats van een hack uit te voeren in real_connect het is mogelijk om de "\0" . toe te voegen in config/database.yml

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

EDIT
Als je de oplossing gebruikt met \0 aan het einde van de databasenaam. Je zult hier waarschijnlijk achter komen en het zelf oplossen, maar ik vermeld het toch:
(althans in mijn versie van Rails )
De databasestring gebruiken met \0 aan het einde geeft een probleem bij het doen van rake test . Het begint met het verwijderen van de testdatabase voordat de ontwikkelingsdatabasedefinities worden gekopieerd en vervolgens wordt een SQL-opdrachtreeks gebruikt die de naam van de testdatabase bevat. Dit veroorzaakt een fout vanwege de \0 in het midden van de string.

In mijn geval gebruik ik een lokale ontwikkelingsdatabase die geen enkel probleem geeft, dus ik hoef geen \0 te hebben in die naam.
Hier is een alternatieve hack om dat op te lossen (originele code in 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. Hoe voer je een selectiequery uit in een DO-blok?

  2. String aaneenschakeling in MySQL

  3. Verbind SAP IQ met SQL Server

  4. EM 12c Drempelwaarden aanpassen