Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Ruby on Rails MySQL # 08S01Bad bắt tay - hạ cấp MySQL?

Thay vì hạ cấp MySQL gem, bạn có thể sửa tham số tên cơ sở dữ liệu để sửa lỗi "bad handshake" vấn đề.

Tôi đã tìm thấy thông tin này: https://github.com/rubygems/rubygems/issues/423 Nó hoạt động tốt.

Thay vì thực hiện hack trong real_connect có thể thêm "\0" trong config/database.yml

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

CHỈNH SỬA
Nếu bạn sử dụng giải pháp với \0 ở cuối tên cơ sở dữ liệu. Bạn có thể sẽ tìm ra điều này và tự giải quyết nó, nhưng tôi vẫn đề cập đến nó:
( ít nhất là trong phiên bản Rails của tôi )
Sử dụng chuỗi cơ sở dữ liệu với \0 ở phần cuối đưa ra sự cố khi thực hiện rake test . Nó bắt đầu bằng việc xóa cơ sở dữ liệu thử nghiệm trước khi sao chép các định nghĩa cơ sở dữ liệu phát triển, sau đó sử dụng chuỗi lệnh SQL bao gồm tên cơ sở dữ liệu thử nghiệm. Điều này sẽ gây ra lỗi \0 ở giữa chuỗi.

Trong trường hợp của tôi, tôi đang sử dụng cơ sở dữ liệu phát triển cục bộ không gặp vấn đề gì nên tôi không cần phải có \0 bằng tên đó.
Đây là một phương pháp hack thay thế để giải quyết vấn đề đó (mã gốc trong 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. Chuyển đổi bảng mysql từ latin1 sang utf8

  2. Làm cách nào để thay thế một biểu thức chính quy trong MySQL?

  3. Đếm xem có bao nhiêu hàng có cùng giá trị

  4. MySQL - Mac - Lỗi 2002 - Không thể kết nối với cục bộ ... thông qua socket

  5. Chuyển đổi dấu thời gian trường datetime từ mysql sang php