Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

रूबी ऑन रेल्स MySQL #08S01खराब हैंडशेक - MySQL को डाउनग्रेड करें?

MySQL रत्न को डाउनग्रेड करने के बजाय, "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 के साथ करते हैं डेटाबेस नाम के अंत में। आप शायद इसका पता लगा लेंगे और इसे स्वयं हल कर लेंगे, लेकिन मैं वैसे भी इसका उल्लेख करता हूं:
(कम से कम रेल के मेरे संस्करण में )
डेटाबेस स्ट्रिंग का उपयोग \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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL त्रुटि:आपके SQL सिंटैक्स में त्रुटि है; पास में उपयोग करने के लिए सही सिंटैक्स के लिए अपने MySQL सर्वर संस्करण से संबंधित मैनुअल की जाँच करें

  2. JSON_CONTAINS () MySQL में उदाहरण

  3. प्रत्येक डेटाबेस को एक अलग फ़ाइल में बैकअप करने के लिए mysqldump के लिए बैच-फ़ाइल

  4. MySQL में एक विशिष्ट कॉलम के बाद कई कॉलम जोड़ना

  5. MySQL कुछ विदेशी कुंजियों को हटा रहा है