【问题标题】:Importing to Couch-DB changes encoding导入到 Couch-DB 会更改编码
【发布时间】:2017-01-25 12:45:00
【问题描述】:

我正在使用一个支持不同语言的数据库,我遇到的问题是,在源 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 ,它的格式总是错误的。

我错过了什么,为什么在初次抓取后它会改变。

【问题讨论】:

  • 您的原始数据似乎不是 UTF-8 格式。这可能吗?
  • @JanLehnardt 它是,我已经从 UTF8 更改它,甚至尝试过 UTF8MB4

标签: json node.js couchdb


【解决方案1】:

要显示特定数据库的当前字符编码集,请在 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 编码导入沙发...

希望对您有所帮助...

【讨论】:

    【解决方案2】:

    原来 MariaDB 有一个错误,它会将数据库格式转换为 latin1 而不是 utf8

    要纠正这个你必须去 /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。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-12
      • 2013-10-05
      • 1970-01-01
      相关资源
      最近更新 更多