sql >> Database teknologi >  >> RDS >> Mysql

Ruby on Rails MySQL #08S01Dårligt håndtryk - nedgradere MySQL?

I stedet for at nedgradere MySQL perle, er det muligt at rette databasenavnsparameteren for at rette op på "dårligt håndtryk" problem.

Jeg fandt dette:https://github.com/rubygems/rubygems/issues/423 Det fungerer godt.

I stedet for at lave et hack i real_connect det er muligt at tilføje "\0" i config/database.yml

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

EDIT
Hvis du bruger løsningen med \0 i slutningen af ​​databasenavnet. Du vil sikkert finde ud af dette og løse det selv, men jeg nævner det alligevel:
(i hvert fald i min version af Rails )
Brug af databasestrengen med \0 i slutningen giver problem, når du laver rake test . Det starter med at slette testdatabasen, før du kopierer udviklingsdatabasens definitioner, og derefter bruge en SQL-kommandostreng, der inkluderer testdatabasenavnet. Dette vil forårsage en fejl på grund af \0 i midten af ​​strengen.

I mit tilfælde bruger jeg en lokal udviklingsdatabase, der ikke giver noget problem, så jeg behøver ikke at have \0 i det navn.
Her er et alternativt hack til at løse det (original kode i 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. Er ODP.NET påkrævet til Oracle 11g Client?

  2. Brug af parametre til mysql_query

  3. MySQL trigger sæt værdier for NY række og opdatere en anden i samme tabel

  4. OPDATERING eller INDSÆT MySQL Python