导入Couch-DB更改编码

时间:2016-12-19 20:01:56

标签: json node.js couchdb

我有一个我正在使用的数据库,它支持不同的语言,我遇到的问题是,在源SQL数据中,格式是正确的。

MariaDB [stmtransit]> SELECT * FROM routes WHERE route_id = 181;
+----------+-----------+------------------+------------------+------------+------------+------------------------------------------+-------------+------------------+
| route_id | agency_id | route_short_name | route_long_name  | route_desc | route_type | route_url                                | route_color | route_text_color |
+----------+-----------+------------------+------------------+------------+------------+------------------------------------------+-------------+------------------+
|      181 |         1 | 369              | Côte-des-Neiges | NULL       |          3 | http://www.stm.info/fr/infos/reseaux/bus | 009EE0      | NULL             |
+----------+-----------+------------------+------------------+------------+------------+------------------------------------------+-------------+------------------+
1 row in set (0.00 sec)

当我移动查询并将其移动到CouchDB中时,它会将重音和除普通字符之外的任何内容更改为

Côte-des-Neiges

我的要求是

function queryRouteTable(db, route_id) {
return db.query({
    sql: "SELECT * FROM routes WHERE route_id = ?;",
    values: [route_id],
})
.take(1);
}

然后我上传到沙发使用rx和rx-couch的代码,无论我在初始抓取后查看document.route_long_name,它总是格式错误。

我错过了什么,为什么它会在最初的抓取后发生变化。

2 个答案:

答案 0 :(得分:0)

要显示特定数据库的当前字符编码集,请在mysql>处键入以下命令:提示。将DBNAME替换为数据库名称:

SELECT default_character_set_name FROM information_schema.SCHEMATA S WHERE schema_name = "DBNAME";

如果您有每个表的编码集,请使用以下命令。将DBNAME替换为数据库名称,将TABLENAME替换为表的名称:

SELECT CCSA.character_set_name FROM information_schema.`TABLES` T,information_schema.`COLLATION_CHARACTER_SET_APPLICABILITY` CCSA WHERE CCSA.collation_name = T.table_collation AND T.table_schema = "DBNAME" AND T.table_name = "TABLENAME";

重要提示:备份您的数据库

如果您有数据库的工作备份,可以通过发出以下命令将其从当前编码转换为UTF-8:

mysql --database=DBNAME -B -N -e "SHOW TABLES" | awk '{print "SET foreign_key_checks = 0; ALTER TABLE", $1, "CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci; SET foreign_key_checks = 1; "}' | mysql --database=DBNAME

并在提示中:

ALTER DATABASE DBNAME CHARACTER SET utf8 COLLATE utf8_general_ci;

现在您应该可以使用UTF-8导出并使用UTF-8编码导入沙发......

希望有帮助...

答案 1 :(得分:0)

原来MariaDB有一个错误,将数据库格式化为utf8的latin1 intead

要纠正此问题,您必须访问/etc/my.cnf 删除

的所有实例
default-character-set=utf8 

在my.cnf中找到标题“mysqld”并置于其下

init_connect='SET collation_connection = utf8_unicode_ci'
init_connect='SET NAMES utf8'
character-set-server=utf8
collation-server=utf8_unicode_ci
skip-character-set-client-handshake 

并保存。

然后重启mariadb。