这个问题始于常见的“不兼容的字符编码:ASCII-8BIT和UTF-8”问题,但那是 不 我要问的问题。相反,我发现这个问题正在发生,因为我的数据库的某些字段在被检索时被标记为ASCII-8BIT,而大多数字段被正确显示为UTF-8。
例如,在列country
和nationality
的表中,第16行中的两列都具有相同的值(复制并粘贴),我得
irb(main):003:0> c = Country.find(16)
irb(main):004:0> puts "#{c.name}, #{c.name.encoding}, #{c.name.bytes.to_a}"
�land Islands, UTF-8, [195, 133, 108, 97, 110, 100, 32, 73, 115, 108, 97, 110, 100, 115]
irb(main):005:0> puts "#{c.nationality}, #{c.nationality.encoding}, #{c.nationality.bytes.to_a}"
�land Islands, ASCII-8BIT, [195, 133, 108, 97, 110, 100, 32, 73, 115, 108, 97, 110, 100, 115]
同样,简单puts name
给出�land Islands
,而nationality
给出"\xC3\x85land Islands"
- 相同的字节,不同的呈现。
无论字符串是否具有非ascii字符,给定列的编码似乎都是常量,因此它不仅仅是字符串的问题。也就是说,所有 nationality
中的值被解释为ascii,而 all name
中的值被解释为UTF-8。
问题不仅限于单个表,我还没有找到任何错误识别列的模式。
以下是设置和环境:
encoding: utf8
config.encoding = "utf-8"
任何人都知道这里发生了什么?
答案 0 :(得分:0)
答案 1 :(得分:0)
我找到了解决方案,使用ruby-mysql gem而不是mysql或mysql2 gems。
答案 2 :(得分:-1)
我认为我的生活也存在同样的问题。
当我从MySQL DB rails中检索数据时,将字符串转换为float:
列“Complemento”和“estado”是DB中的字符串,尽管操作“show”表示 Complemento:0.0 - >在DB是“apto 191”
Escola成功创作。
Nome:席尔瓦布拉加
Endereco:Rua Dr Arnaldo
Numero:99
补充:0.0 - > DB是“apto 191”
Cidade:圣保罗
Estado:0.0 - > DB是“MG”
编辑|回到