gpt4 book ai didi

mysql - Rails - 奇怪的字符通过验证并中断查询

转载 作者:行者123 更新时间:2023-11-29 01:02:58 25 4
gpt4 key购买 nike

我将一个字符串复制粘贴到一个表单字段中,一个奇怪的字符破坏了我的 MySql 查询。

我可以这样强制在控制台报错(奇怪的字符在“Invalid”和“Character”这两个词的中间,你也可以复制粘贴):

> dog.name = "Invalid ​Character"
> dog.save # -> false

返回以下错误:

ActiveRecord::StatementInvalid: Mysql2::Error: Incorrect string value: '\xE2\x80\x8BCha...' for column 'name' at row 1: UPDATE `dogs` SET `name` = 'Invalid ​Character' WHERE `dogs`.`id` = 2227

如错误所述,它用 '\xE2\x80\x8B' 替换了字符。

是否有任何验证可以用来删除这些奇怪的字符?

Obs:我也看到了

> "Invalid ​Character".unpack('U*')

返回

[73, 110, 118, 97, 108, 105, 100, 32, 8203, 67, 104, 97, 114, 97, 99, 116, 101, 114]

奇怪的字符一定是8230那个。

Obs2:在我的 application.rb 中,我有:config.encoding = "utf-8"

编辑

在我的控制台上,我得到了:

> ActiveRecord::Base.connection.charset # -> "utf8"
> ActiveRecord::Base.connection.collation # -> "utf8_unicode_ci"

我还运行(在 rails db mySql 控制台上):

> SELECT table_collation FROM INFORMATION_SCHEMA.TABLES where table_name = 'dogs';

并得到 "utf8_unicode_ci"

EDIT2

如果我将表的字符集更改为 utf8mb4,则不会收到错误。但是,我仍然必须过滤那些字符。

最佳答案

在 rails db MySql 控制台上,我使用了:

SHOW CREATE TABLE dogs;

查明表的字符集是latin1

我刚刚使用此查询添加了一个迁移:

ALTER TABLE dogs CONVERT TO CHARACTER SET utf8mb4;

它开始正常工作。

关于mysql - Rails - 奇怪的字符通过验证并中断查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28325756/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com