我已将每个编码集变量设置为utf8
。
在database.yml
:
development: &development
adapter: mysql2
encoding: utf8
在my.cnf
:
[client]
default-character-set = utf8
[mysqld]
default-character-set = utf8
skip-character-set-client-handshake
character-set-server = utf8
collation-server = utf8_general_ci
init-connect = SET NAMES utf8
如果我在终端运行mysql客户端:
mysql> show variables like 'character%';
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| 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/share/mysql/charsets/ |
+--------------------------+----------------------------+
mysql> show variables like 'collation%';
+----------------------+-----------------+
| Variable_name | Value |
+----------------------+-----------------+
| collation_connection | utf8_general_ci |
| collation_database | utf8_general_ci |
| collation_server | utf8_general_ci |
+----------------------+-----------------+
但这是打败空气。当我从utf8
应用中插入Rails
数据时,它最终会成为????????????。
我想念什么?
答案 0 :(得分:15)
检查不是全局设置,但是当您连接到特定数据库以进行应用时。当您更改mysql的设置时,您还更改了应用数据库的设置。
检查它的简单方法是将mysql登录到app db:
mysql app_db_production -u db_user -p
或rails命令:
rails dbconsole production
对于我的应用,它看起来像这样:
mysql> show variables like 'character%';
+--------------------------+----------------------------+
| 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 | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)
mysql> show variables like 'collation%';
+----------------------+-------------------+
| Variable_name | Value |
+----------------------+-------------------+
| collation_connection | utf8_general_ci |
| collation_database | latin1_swedish_ci |
| collation_server | utf8_general_ci |
+----------------------+-------------------+
3 rows in set (0.00 sec)
更改数据库归类和charset的命令:
mysql> alter database app_db_production CHARACTER SET utf8 COLLATE utf8_general_ci ;
Query OK, 1 row affected (0.00 sec)
请记住改变所有桌子的字符集和整理:
ALTER TABLE tablename CHARACTER SET utf8 COLLATE utf8_general_ci; # changes for new records
ALTER TABLE tablename CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci; # migrates old records
现在应该可以了。
答案 1 :(得分:3)
我遇到了同样的问题。我将characterEncoding添加到mysql连接字符串的末尾:
use this: jdbc:mysql://localhost/dbname?characterEncoding=utf8
instead of this: jdbc:mysql://localhost/dbname
答案 2 :(得分:1)
好的,对于@Ravbaker的答案没有削减它的其他任何人......更多提示
MySQL具有多个级别指定的编码:服务器,数据库,连接,表甚至字段/列。我的问题是,字段/列被迫拉丁(这超过了所有其他编码)。我将字段设置回表编码(这是utf-8),世界再次变好。
大多数设置都可以在通常的位置设置:my.cnf,alter queries和rails database.yml文件。
ALTER TABLE t MODIFY col1 CHAR(50) CHARACTER SET utf8;
是我的诀窍。
对于服务器/连接编码,请使用my.cnf和database.yml 对于数据库/表/列编码,使用查询
(您也可以通过其他方式实现这些目标)
答案 3 :(得分:0)
你在HTML中有这个吗?
<meta http-equiv="content-type" content="text/html;charset=UTF-8" />
或带有<!doctype html>
<meta charset="utf-8">
您可能需要这个让浏览器在utf8中发送字符串。
答案 4 :(得分:0)
我今天有些问题!它是通过删除我的表并创建新的,然后db:migrate来解决的,所有这些都很有效!
警告:它将删除此表中的所有数据
所以:
$ mysql -u USER -p
做得好!
mysql > drop database YOURDB_NAME_development;
mysql > create database YOURDB_NAME_development CHARACTER SET utf8 COLLATE utf8_general_ci;
mysql > \q
$ rake db:migrate