mysql 0终止的字符串在XML中显示为Unicode 0x0

时间:2013-02-02 17:39:52

标签: mysql xml unicode

在将一些应用程序从PHP和Delphi迁移到Java-RS的过程中,一些列条目此时正在破坏该节目。

将带有JPA的mySQL数据读入Java Pojos后,使用JaxB将结果转换为XML并尝试将结果读回JQuery / jqGrid,发生故障。

在浏览器中,问题只显示在“格式不正确”。 使用Eclipse XML编辑器查看详细信息会显示错误消息:

An invalid XML character (Unicode 0x0) was found in the element content of the document

现在我想继续修复原始数据。

  1. SQL查询如何查找具有的行 无效的条目?
  2. SQL查询如何修复这些问题 行?
  3. 我们假设有问题的列是“客户”表中的“名称”

    对于问题#1,我发现:  来自客户的SELECT名称,其中hex(name)如“%00”;

    上班。对于问题#2,我假设使用左子字符串的更新可能有效。我不确定这种情况下的长度。看起来长度(名称)将返回包括终止零字符的长度。在这种情况下,左边的更新(长度(名称)-1)是否正常工作?

    我不确定数据库的备份和恢复是否会保持当前有些损坏的数据库的形状。因此,了解如何使用insert语句重现该情况也是有帮助的,该语句有意创建空终止字符串。

2 个答案:

答案 0 :(得分:2)

我认为您应该可以使用类似

的内容转换HEX()
UPDATE customer SET name=UNHEX(REPLACE(HEX(name), '00', ''));

或只是

UPDATE customer SET name=REPLACE(name, CHAR(0), '');

答案 1 :(得分:0)

update customer set name=left(name,length(name)-1) where hex(name) like "%00";