使用PHP将clob数据导入MySQL文本列
我编写了一个PHP脚本,将表从Oracle服务器导入MySQL服务器。导入器工作得很好,除了我在MySQL中创建的唯一CLOB列在每一行中都显示为NULL之外。存储在那里的数据只是大量的文本,因此没有任何二进制文件需要目标列是BLOB 以下是我在脚本中使用的相关代码:使用PHP将clob数据导入MySQL文本列,php,mysql,oracle,import,Php,Mysql,Oracle,Import,我编写了一个PHP脚本,将表从Oracle服务器导入MySQL服务器。导入器工作得很好,除了我在MySQL中创建的唯一CLOB列在每一行中都显示为NULL之外。存储在那里的数据只是大量的文本,因此没有任何二进制文件需要目标列是BLOB 以下是我在脚本中使用的相关代码: while ($row = oci_fetch_row($oracle_result)) { // Begin looping through all fields in current row for
while ($row = oci_fetch_row($oracle_result)) {
// Begin looping through all fields in current row
for($i=0;$i<$num_fields;$i++) {
$this_field = $row[$i]; // Get data value for this field
// $arFieldDefs holds field metadata
$field_type = $arFieldDefs[$i]['type']; // Get data type for this field
$field_name = $arFieldDefs[$i]['name']; // Get field name for this field
if (is_null($this_field)) {
//This field is NULL
$this_field = "NULL";
} else {
// Field is not null, process its data type
switch ($field_type) {
case "NUMBER":
//str_replace(",", "", $this_field); //Remove commas from number string
break;
case "INT":
//str_replace(",", "", $this_field); //Remove commas from number string
break;
case "CHAR":
$this_field = "'" .addslashes($this_field) ."'";
break;
case "VARCHAR2":
$this_field = "'" . addslashes($this_field) . "'";
break;
case "DATE":
$this_field = "'" . $this_field . "'";
break;
case "CLOB":
// Meaningful var name to remind us we now have an object of PHP class OCI-Lob
$clob_obj = $this_field;
// Tried read($clob_obj->size()) instead of load()
// but result was the same
$field_contents = $clob_obj->load();
$this_field = "'" . $field_contents . "'";
break;
default:
// $rec_num is the currently looped record number
echo "Bad Field Type '" .$field_type ."' in Field: '".$this_field ."' RecNum: " .$rec_num ."\n";
die;
}
}
$value_string .= $this_field . ", "; // Add comma and space after field value
} // End FOR loop
// Cleanup and finish:
// Strip trailing comma+space, put $value_string in parentheses,
// And loop back to build another row in the INSERT
} // End WHILE loop
$field\u内容中有撇号吗?echo strlen$字段内容;在中断案例CLOB之前:。您的意思是删除撇号,使行显示:$this_field=$field_contents?否,$field_contents中的撇号会导致问题-导致类似field2='blah blah's blat'的内容注意不平衡的撇号。是的,我省略了撇号,但仍然收到相同的结果。您从echo strlen$field_contents;中得到了什么?我怀疑CLOB没有正确读取。
CREATE TABLE MY_TABLE_NAME (
ENTRY_ID VARCHAR(11) NOT NULL,
ELEMENT_NAME VARCHAR(155) DEFAULT NULL,
SHORT_DATA VARCHAR(255) DEFAULT NULL,
ELEMENT_DATA_OLD VARCHAR(4000) DEFAULT NULL,
SM_ID VARCHAR(11) DEFAULT NULL,
SUBMITTER VARCHAR(254) DEFAULT NULL,
MODIFIED_DATE INT(11) DEFAULT NULL,
LAST_MODIFIED_BY VARCHAR(254) DEFAULT NULL,
SORT_ORDER INT(11) DEFAULT NULL,
CREATE_DATE INT(11) DEFAULT NULL,
REPLICATED_DATE DATETIME DEFAULT NULL,
TYPE INT(11) DEFAULT NULL,
ELEMENT_DATA MEDIUMTEXT,
PRIMARY KEY (ENTRY_ID),
UNIQUE KEY MTN_ENTRYID_PK (ENTRY_ID),
) ENGINE=INNODB DEFAULT CHARSET=utf8`