MSJones
Grünschnabel
Hallo zusammen.
Ich hab mal wieder ein größeres Problem.
Ich hab eine SQLite-Datenbank, in deren Tabellen mehrere Sprachen enthalten sind. Unter anderem auch chinesisch und koreanisch.
Diese Tabelle soll ich nun in eine Access-Datenbank schreiben, quasi als lokales Backup, in das der Benutzer auch mal reingucken kann.
Wenn ich jetzt einfach nur normalen Text da reinschreibe, also ANSI, funktioniert das ohne Probleme.
Aber sobald ich davon abweiche und eigentlich UTF-8 bräuchte, verhau ich mir die Zeichem.
Hier mal mein Code:
Ich würd mal sagen, am SQLite kanns erst mal nicht liegen, denn wenn ich die Werte auslese und auf der Webseite anzeigen lasse, werden die Strings richtig angezeigt, so wie es sein soll.
Hatte vielleicht jemand dieses Problem schon und ne Lösung oder nen Tip für mich?
Gruß,
MSJones
Ich hab mal wieder ein größeres Problem.
Ich hab eine SQLite-Datenbank, in deren Tabellen mehrere Sprachen enthalten sind. Unter anderem auch chinesisch und koreanisch.
Diese Tabelle soll ich nun in eine Access-Datenbank schreiben, quasi als lokales Backup, in das der Benutzer auch mal reingucken kann.
Wenn ich jetzt einfach nur normalen Text da reinschreibe, also ANSI, funktioniert das ohne Probleme.
Aber sobald ich davon abweiche und eigentlich UTF-8 bräuchte, verhau ich mir die Zeichem.
Hier mal mein Code:
PHP:
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
</head>
<?php
// DB Verbindung
$db_temp = null;
$db_temp_access = null;
function query_insert($SQL, $db)
{
$result = $db->query($SQL);
if ($result == null)
{
error_log($SQL);
}
return ($result);
}
function fetch_array($result)
{
//return($result->fetchArray());
if ($result == null)
{
return null;
}
return $result->fetch(PDO::FETCH_BOTH);
}
function connectDatabases()
{
try
{
$db_access = new PDO("odbc:Driver={Microsoft Access-Treiber (*.mdb)};Dbq=".$_SERVER["DOCUMENT_ROOT"]."\\backup.mdb;Uid=Admin","","");
$db = new PDO("sqlite:".$_SERVER["DOCUMENT_ROOT"]."sqlite3db");
}
catch (PDOException $e)
{
echo "Error: ".$e->getMessage()."<br>";
}
$GLOBALS["db_temp_access"] = $db_access;
$GLOBALS["db_temp"] = $db;
}
function copyTables()
{
copyTable("TEXTE");
}
function copyTable($tableName)
{
// Spaltennamen ermitteln
$SQL = " PRAGMA table_info(".$tableName.");";
error_log($SQL);
$result = query_insert($SQL, $GLOBALS["db_temp"]);
while ($row = fetch_array($result))
{
$columnNames[] = $row[1];
$columnType[] = $row[2];
}
// Tabelleninhalt selektieren
$SQL = " SELECT ".implode(",",$columnNames)." FROM ".$tableName.";";
$result = query_insert($SQL, $GLOBALS["db_temp"]);
while ($row = fetch_array($result))
{
// Tabelleninhalt schreiben
$SQL_insert = " INSERT INTO ".$tableName;
$SQL_insert.= " (".implode(",",$columnNames).")";
$SQL_insert.= " VALUES";
$SQL_insert.= " (";
for ($i=0; $i<count($columnNames); $i++)
{
if ($i > 0)
{
$SQL_insert.=", ";
}
// Vom Typ die Länge abschneiden
$columnType[$i] = trim(preg_replace("/\(\d*\)/","",$columnType[$i]));
// Einfache Anführungszeichen ersetzen
$row[$columnNames[$i]] = str_replace("'", "''", $row[$columnNames[$i]]);
switch (strtoupper($columnType[$i]))
{
case "LONG":
case "INTEGER":
case "BOOLEAN":
case "SMALLINT":
if ($row[$columnNames[$i]] == "")
{
$SQL_insert.= "0";
}
else
{
$SQL_insert.=$row[$columnNames[$i]];
}
break;
case "NVARCHAR":
case "VARCHAR":
$SQL_insert.= "'".$row[$columnNames[$i]]."'";
break;
default:
echo "Column: ".$columnType[$i]."<br>";
}
}
$SQL_insert.= " );";
$result2 = query_insert($SQL_insert, $GLOBALS["db_temp_access"]);
}
echo $tableName." copied.<br>";
}
connectDatabases();
copyTables();
?>
Hatte vielleicht jemand dieses Problem schon und ne Lösung oder nen Tip für mich?
Gruß,
MSJones