Trt*_*Trt 55 ruby mysql encoding ruby-on-rails
我有一个在生产模式下运行的rails应用程序,但是当用户试图保存记录时,突然出现了这个错误.
Mysql2::Error: Incorrect string value
更多细节(来自生产日志):
Parameters: {"utf8"=>"â<9c><93>" ... 
Mysql2::Error: Incorrect string value: '\xC5\x99\xC3\xA1k 
Mysql2::Error: Incorrect string value: '\xC5\x99\xC3\xA1k 
现在我看到了一些需要删除数据库并重新创建数据库的解决方案,但我不能这样做.
现在mysql显示了这个:
mysql> show variables like 'char%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | latin1                     |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | latin1                     |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.04 sec)
有什么问题,如何更改它,以便我对任何字符都没有任何问题?
另外:这个问题可以用javascript解决吗?在发送之前转换它?
谢谢
Chu*_*Zhu 75
问题是由你的mysql服务器端的charset引起的.您可以手动配置:
ALTER TABLE your_database_name.your_table CONVERT TO CHARACTER SET utf8
或删除表并重新创建它:
rake db:drop
rake db:create
rake db:migrate
引用:
UPDATE
第一个命令只影响指定的表,如果要更改数据库中的所有表,可以这样做
ALTER DATABASE databasename CHARACTER SET utf8 COLLATE utf8_general_ci;
参考:
Bes*_*esi 43
我设法通过以下博客文章存储表情符号(占用4个字节):
Rails 4,MySQL和Emoji(
Mysql2::Error: Incorrect string value error.)当你指定了charset时,你可能会认为你可以安全地将大多数utf8数据插入到mysql中
utf-8.可悲的是,你错了.问题是当存储在VARCHAR列中时,utf8字符集占用3个字节.另一方面,表情符号字符占用4个字节.解决方案分为两部分:
更改表和字段的编码:
Run Code Online (Sandbox Code Playgroud)ALTER TABLE `[table]` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_bin, MODIFY [column] VARCHAR(250) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin告诉
mysql2适配器:Run Code Online (Sandbox Code Playgroud)development: adapter: mysql2 database: db username: password: encoding: utf8mb4 collation: utf8mb4_unicode_ci希望这有助于某人!
然后我不得不重启我的应用程序,它工作.请注意,有些emojis可以在没有此修复的情况下工作,而有些则不会:
mfa*_*kas 23
您可以使用这样的迁移将表转换为utf8:
class ConvertTablesToUtf8 < ActiveRecord::Migration
  def change_encoding(encoding,collation)
    connection = ActiveRecord::Base.connection
    tables = connection.tables
    dbname =connection.current_database
    execute <<-SQL
      ALTER DATABASE #{dbname} CHARACTER SET #{encoding} COLLATE #{collation};
    SQL
    tables.each do |tablename|
      execute <<-SQL
        ALTER TABLE #{dbname}.#{tablename} CONVERT TO CHARACTER SET #{encoding} COLLATE #{collation};
      SQL
    end
  end
  def change
    reversible do |dir|
      dir.up do
        change_encoding('utf8','utf8_general_ci')
      end
      dir.down do
        change_encoding('latin1','latin1_swedish_ci')
      end
    end
  end
end
| 归档时间: | 
 | 
| 查看次数: | 35435 次 | 
| 最近记录: |