Pregunta

Tenemos una base de datos y nuestro cliente está escrito con Delphi 2007. La última se utiliza Interbase 2009. La base de datos es viejo, creo que fue creado alrededor de 2002 y es ahora más de 25 GB. Recientemente he descubierto que, en IBConsole

upper('åäö')

generar 'AAO'. Debe ser 'AAO'. Se trata de personajes suecos que faltan en el alfabeto Inglés.

he buscado sobre el tema y encontraron esta enlace . La parte importante es:

  

¿Cómo puedo cambiar el carácter por defecto   Conjunto de una base de datos existente? Ahi esta   no hay manera de hacerlo compatible. Tú   debe volver a crear la base de datos de   metadatos.

Este blog fue escrito por Craig 2004-06-29 Stuntz, Mi esperanza es que Interbase ha evolucionado desde que y hay una manera de cambiar el juego de caracteres de Interbase 2009 con poco esfuerzo. Si no es posible que puede hacerse desde un archivo de copia de seguridad gbk? La última opción es crear una nueva base de datos con el juego de caracteres correcto y de alguna manera bombeo de datos de la anterior.

Así que tengo 2 preguntas.

  1. ¿Cuál es la forma más fácil de cambio de juego de caracteres?
  2. ¿Qué juego de caracteres debe elegir tener superior ( 'AAO) = 'AAO'

EDIT: Como Craig dijo que no hay forma real, salvo copiar los datos que son conscientes del juego de caracteres. Así que elegir otro camino.

vName := AnsiUpperCase(Nametosearch);
MakeCharLowercase(vName, 'åäö');
// Then use vName when search in database.

procedure TDuplicateDeptForm.MakeCharLowercase(var aName: String; aCharSet: String);
var
  vIndex, i: Integer;
  vChar: String;
begin
  for i := 1 to Length(aCharSet) do
  begin
    vChar := AnsiUpperCase(aCharSet[i]);
    repeat
      vIndex := AnsiPos(vChar, aName);
      if vIndex > 0 then
        aName[vIndex] := AnsiLowerCase(vChar)[1];
    until vIndex = 0;
  end;
end;

Esto simplemente convertir de nuevo personajes suecos en este caso volver a minúsculas ya que este es el resultado que recibo de Interbase. Quizás no sea la solución más bonito, pero creo que funciona.

¿Fue útil?

Solución

Para uso sueco ISO-8859-1 o UNICODE. No estoy familiarizado con cualquier nueva forma de cambiar el juego de caracteres por defecto en los DBs existentes en IB 2009. Cuando se piensa en lo que está involucrado verá usted estaría volviendo a crear la base de datos de todas formas; que estaría cambiando el formato de almacenamiento de todo el texto en el PP!

La manera más fácil de bombear los datos es, probablemente, una bomba de datos dedicado como el de DB Workbench . Es necesario la edición "Pro" para esto, pero hay una versión de prueba para ver si funciona. Una vez más, tenga en cuenta que puede que no sea capaz de simplemente copiar directamente los datos; vas a tener que hacerlo de una manera charset-conscientes. Es por eso que siempre debe comprar su herramienta de gestión de base de datos de una persona Europea. :)

Otros consejos

Hay una utilidad línea de comando herramienta gratuita llamada FBClone: Es capaz de recrear su base de datos cambiando el juego de caracteres. Los componentes de la UIB uso de proyectos, por lo que es capaz de usar Interbase o Firebird. http://code.google.com/p/fbclone/

update RDB$DATABASE set RDB$CHARACTER_SET_NAME = 'UTF8'
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top