gpt4 book ai didi

mysql - 使用 Solr 索引包含 utf8 数据的 latin1 列

转载 作者:行者123 更新时间:2023-11-29 07:05:02 25 4
gpt4 key购买 nike

我正在开发一个基于 PHP 的网络应用程序,它有一个现有的 MySQL 数据库,其中所有文本列都使用 latin1 编码,但它们中有 utf8 数据。

这适用于 PHP 应用程序,它使用 latin1 编码进行数据库连接以检索数据,然后直接输出到浏览器,告诉浏览器页面是 utf8。

但是,我们现在正尝试使用 Solr 来索引数据库,使用 MySQL JDBC 连接器,我们在索引中得到乱码。

这是连接字符串:

<dataSource
url="jdbc:mysql://localhost/db_name?characterEncoding=latin1&amp;characterSetResults=utf8"
user="user" password="password" />

有没有办法让 Solr 将数据检索为 latin1,然后将其视为 utf8 而无需转换?我尝试更改 JDBC 连接字符串中的 characterEncoding 和 characterSetResults 参数,但无济于事。

我确定解决此问题的正确方法是将所有文本列转换为 utf8,但我宁愿不走这条路(目前),因为它会破坏 webapp。

最佳答案

你是对的,正确的方法是修复你的数据库。相信我,我刚刚完成了这个(修复 solr 安装,很奇怪),你越早修复它,它给你带来的痛苦就越小。

有两种方法可以修复以错误编码存储的数据:

  1. mysqldump 所有数据为 latin1 (--default-character-set=latin1),编辑表定义为 CHARACTER SET= utf8 而不是 latin 然后重新导入转储。

  2. 对每个编码错误的列运行两个 alter 语句

    ALTER table MODIFY columns BINARY

    ALTER TABLE MODIFY 列 VARCHAR(255) CHARSET utf8

    通过首先修改为 BINARY,您可以诱使 MySQL 不运行 latin1=>utf8 转换,在您的情况下,这会双重编码并破坏您的数据。

如果您的数据库很大,1 会比 2 快。

紧接着,只需将您的 PHP 应用程序配置为使用 utf8 与 MySQL 通信。这可以通过发送 SET NAMES utf8 作为每个连接的第一个查询来完成。如果 PHP 已经将 utf8 数据发送到 MySQL,那么您需要做的就是这些。

如果在这个措辞奇特且详细的答案之后您仍然在寻找黑客...尝试将 JDBC 配置为以 UTF8 连接,但看看是否有办法让它在执行任何操作之前发送预命令工作。

如果您执行该命令:SET NAMES latin1 那么,理论上,Solr 应该以 UTF8 连接并以 UTF8 处理来自该连接的数据,但 MySQL 会将连接视为 latin1 连接而不进行转换来自 latin1 列的任何数据。

关于mysql - 使用 Solr 索引包含 utf8 数据的 latin1 列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7852333/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com