Lai*_*uan 9 mysql encoding ruby-on-rails utf-8
我已经设置了我能想到的每个编码集变量utf8.
在database.yml:
development: &development
adapter: mysql2
encoding: utf8
Run Code Online (Sandbox Code Playgroud)
在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
Run Code Online (Sandbox Code Playgroud)
如果我在终端中运行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 |
+----------------------+-----------------+
Run Code Online (Sandbox Code Playgroud)
但这是打败空气.当我utf8从Rails应用程序插入数据时,它最终变成了????????????.
我错过了什么?
Rav*_*ker 15
检查不是全局设置,但是当您连接到特定数据库以进行应用时.当您更改mysql的设置时,您还更改了应用数据库的设置.
检查它的简单方法是将mysql登录到app db:
mysql app_db_production -u db_user -p
Run Code Online (Sandbox Code Playgroud)
或rails命令:
rails dbconsole production
Run Code Online (Sandbox Code Playgroud)
对于我的应用程序它看起来像这样:
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)
Run Code Online (Sandbox Code Playgroud)
用于更改数据库排序规则和字符集的命令:
mysql> alter database app_db_production CHARACTER SET utf8 COLLATE utf8_general_ci ;
Query OK, 1 row affected (0.00 sec)
Run Code Online (Sandbox Code Playgroud)
并记得改变所有表的charset和collation:
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
Run Code Online (Sandbox Code Playgroud)
现在它应该工作.
| 归档时间: |
|
| 查看次数: |
3683 次 |
| 最近记录: |