使用場景
項目中,數據庫升級工具,使用xml格式保存數據庫升級腳本,格式如下:
<?xml version="1.0" encoding="iso-8859-1" ?>
<upgrade version="1.1">
<sqls>
<!-- 數據庫升級腳本 -->
<DML>
UPDATE sysconfig SET strValue='' where nType=10023;
</DML>
<DDL DB="MySql">
ALTER TABLE device MODIFY COLUMN strPassword VARCHAR(256);
</DDL>
<DDL DB="SQLServer">
ALTER TABLE device ALTER COLUMN strPassword VARCHAR(256);
</DDL>
</sqls>
</upgrade>
其中,關於此工具邏輯說明如下:
1. <DML>
和 <DDL>
分別對應DML和DDL類型的語句;
2. 如果SQL語句有兼容性問題,需要分別標註數據庫類型,此工具要兼容MySQL和SQL Server;
3. 直接執行SQL語句是不需要對XML的特殊字符做轉義的。
對於以下語句:
UPDATE sysconfig SET strValue=” where nType=10023;
當strValue=”的值爲xml時,將涉及到xml嵌套的問題,需要對內嵌的xml特殊字符做轉義。
解決方案
需要轉義的字符如下:
原字符 | 轉義字符 |
---|---|
< |
< |
> |
> |
" |
" |
特殊說明
但是,有些特殊情況下,要保留轉移字符,需要對轉移字符再次轉義。
比如:
字符,表示HTML的回車符號。在xml中會被忽略掉,因此需要分別對“&”、“#”、“;”做轉義。最終應寫爲:&#13;
。