我有一个 Rails 应用程序。有时,当用户在文本字段中写入内容并执行查询以更新 MySQL 数据库中的该字段时,我会收到以下错误日志:
更新船 SET 描述 = 'Vive la experiencia única de navegar abordo de un clásico de madera de lujo como Mako。 Te emocionará.', updated_at = '2015-03-10 20:10:32' WHEREboats.id = 1
E, [2015-03-10T20:10:32.223430 #20343] ERROR -- : Mysql2::Error: Incorrect string value: '\xE2\x80\xA8\x09Te...' for column 'description' at row 1: UPDATE boats SET description = 'Vive la experiencia única de navegar abordo de un clásico de madera de lujo como Mako.
Te emocionará.', updated_at = '2015-03-10 20:10:32' WHERE boats.id = 1
注意:抱歉,我无法将上面的代码作为代码。必须有特殊字符。
我希望用户可以添加任何字符而不会出错。
我有一个开发和生产环境。该错误仅在生产中发生。
我看到这个帖子看起来和我的问题一样:Mysql2::Error: Incorrect string value
我运行这个查询 show variables like 'char%';
来检查数据库字符配置和:
开发:
'character_set_client', 'utf8'
'character_set_connection', 'utf8'
'character_set_database', 'utf8'
'character_set_filesystem', 'binary'
'character_set_results', 'utf8'
'character_set_server', 'utf8'
'character_set_system', 'utf8'
'character_sets_dir', '/usr/local/Cellar/mysql/5.6.19/share/mysql/charsets/'
生产:
'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/'
所以,我执行了 ALTER DATABASE yanpyprod CHARACTER SET utf8 COLLATE utf8_general_ci;
将我的数据库字符集更新为 utf8。
但是,将字符集更改为utf8后,我仍然收到同样的错误。
最佳答案
如果您运行 ALTER TABLE your_database_name.your_table CONVERT TO CHARACTER SET utf8
而不是在上面的数据库中更新字符集的查询,它就会起作用。
解决方案是在最后的附件中。
关于Mysql2::错误:不正确的字符串值:'\xE2\x80\xA8\x09,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28973453/