Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql Rails为我输入的utf8数据显示问号(??)_Mysql_Ruby On Rails_Encoding_Utf 8 - Fatal编程技术网

Mysql Rails为我输入的utf8数据显示问号(??)

Mysql Rails为我输入的utf8数据显示问号(??),mysql,ruby-on-rails,encoding,utf-8,Mysql,Ruby On Rails,Encoding,Utf 8,我已经将我能计算出的每个编码集变量设置为utf8 在数据库.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 = ut

我已经将我能计算出的每个编码集变量设置为
utf8

数据库.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 |
+----------------------+-----------------+
但这是为了打破僵局。当我从
Rails
app插入
utf8
数据时,它最终变成了


我错过了什么?

HTML中有这个吗

<meta http-equiv="content-type" content="text/html;charset=UTF-8" />

或者在HTML5页面上使用



您可能需要此选项才能让浏览器以utf8格式发送字符串。

请不要选中全局设置,而是在您连接到特定数据库进行应用时选中。当您更改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)
用于更改数据库排序规则和字符集的命令:

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 

现在应该可以用了。

我今天有点问题!通过删除我的表并创建新表,然后db:migrate,一切都很好
警告:它将删除此表中的所有数据
所以:

$mysql-u USER-p
mysql>删除数据库YOURDB\u NAME\u开发
mysql>创建数据库YOURDB\u NAME\u开发字符集utf8 COLLATE utf8\u general\u ci
mysql>\q
$rake db:migrate

干得好

如果@Ravbaker的答案不能解决其他人的问题,那就好了。。更多提示

MySQL在多个级别指定了编码:服务器、数据库、连接、表,甚至字段/列。我的问题是,字段/列被强制使用拉丁语(它超过了所有其他编码)。我将字段设置回表编码(utf-8),世界再次变得美好

大多数设置可以在通常的位置设置:my.cnf、alterquerys和railsdatabase.yml文件

ALTER TABLE t MODIFY col1 CHAR(50) CHARACTER SET utf8;
正是这个问题帮了我的忙

对于服务器/连接编码,请使用my.cnf和database.yml 对于数据库/表/列编码,使用查询


(您也可以通过其他方式实现这些功能)

我也遇到了同样的问题。我在mysql连接字符串的末尾添加了characterEncoding:

use this: jdbc:mysql://localhost/dbname?characterEncoding=utf8
instead of this: jdbc:mysql://localhost/dbname

可能需要使用utf\U unicode\U ci而不是utf\U general\U ci。我已经创建了一个要点,我用来生成SQL来迁移我的rails应用程序,这个应用程序有这个问题-虽然很小,但它的结构很漂亮:请参阅,以了解有关问号和如何处理问号的讨论。请小心<代码>更改。。。修改和
更改。。。转换为
做不同的事情。如果您仅有的文本是ascii,则两者都可以。如果列中当前有正确的latin1字节,则需要
转换为
,以更改字节。表从数据库继承。列继承自表。因此,如果您有权删除数据库,那么这段代码是简单而有效的。无论如何,这段代码可能很好,但请记住,如果数据已经存储在数据库中,那么它对您没有多大帮助。
use this: jdbc:mysql://localhost/dbname?characterEncoding=utf8
instead of this: jdbc:mysql://localhost/dbname