sql >> データベース >  >> RDS >> Mysql

Ruby on Rails MySQL#08S01悪いハンドシェイク-MySQLをダウングレードしますか?

    MySQL gemをダウングレードする代わりに、データベース名パラメーターを修正して、"bad handshake"を修正することができます。 問題。

    私はこれを見つけました: https://github.com/rubygems/rubygems/issues/423 うまく機能しています。

    real_connectでハックする代わりに "\0"を追加することができます config/database.yml

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

    編集
    \0でソリューションを使用する場合 データベース名の最後にあります。あなたはおそらくこれを見つけて自分で解決するでしょうが、とにかくそれについて言及します:
    少なくとも私のバージョンのRailsでは
    \0でデータベース文字列を使用する 最後に、rake testを実行するときに問題が発生します 。まず、開発データベース定義をコピーする前にテストデータベースを削除し、次にテストデータベース名を含むSQLコマンド文字列を使用します。これにより、エラーが発生します \0のため 文字列の真ん中に。

    私の場合、問題のないローカル開発データベースを使用しているので、\0は必要ありません。 その名前で。
    これを解決するための代替ハックがあります(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. PDOとは何ですか、SQLインジェクションとどのように関連していますか、なぜこれを使用する必要がありますか?

    2. MySQLは2つの日付形式の間で変換します

    3. CSVデータ内のカンマ

    4. 列値の代わりに列名を取得する