Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > MySQL
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

 
 
Herramientas Buscar en Tema Desplegado
  #2  
Antiguo 09-12-2025
Avatar de duilioisola
[duilioisola] duilioisola is offline
Miembro Premium
 
Registrado: ago 2007
Ubicación: Barcelona, España
Posts: 1.806
Poder: 22
duilioisola Es un diamante en brutoduilioisola Es un diamante en brutoduilioisola Es un diamante en bruto
No conozco MySQL, pero trato con Firebird y supongo que la lógica debe ser similar.

Por un lado está el charset de la base de datos
Por otro lado está el charset del cliente (web, aplicación, servicio, etc.)

Cuando creas la base de datos le dices qué charset tiene cada campo.
Cuando conectas le dices con qué charset trabajas en la aplicación.
El driver cliente de base de datos hará la conversión (trasliteración) de un charset al otro.

Si en alguno de los dos sitios omites el charset, no habrá trasliteración y te devolverá los bites que interpretará como mejor pueda.

Letra Ñ -> es el código Unicode "U+00D1" -> que se representa por 2 bytes en UTF8 y al interpretarse como WIN1252 queda "Ñ"

Ej.
Firebird
Tabla con campo texto rellenado con charset UTF8 y collate CaseInsensitive + AccentInsensitive
Código SQL [-]
CREATE TABLE PERSONAS (
    ID INTEGER,
    NOMBRE VARCHAR (100) CHARACTER SET UTF8 COLLATE UNICODE_CI_AI
);

Delphi
Conexión desde windows. el charset de Windows es WIN1252
Código Delphi [-]
  UsuarioBD := 'SYSDBA';
  ClaveBD := 'masterkey';
  CharsetBD := 'WIN1252';
  RolBD := '';

  [...]

  with DataBase do
  begin
     try
        if not TestConnected then
        begin
           DBName := BaseDeDatos;
           DBParams.Clear;
           DBParams.Values['user_name'] := UsuarioBD;
           DBParams.Values['password'] := ClaveBD;
           if (CharsetBD <> '') then
              DBParams.Values['lc_ctype'] := CharsetBD;
           if (RolBD <> '') then
              DBParams.Values['sql_role_name'] := RolBD;
           Log(format('Conectando. user_name: %s, password: %s, sql_role_name: %s', [DBParams.Values['user_name'], DBParams.Values['password'], DBParams.Values['sql_role_name']]));
           Open;
        end;
     except
        on e: Exception do
           ShowMessage(Format(_('Imposible abrir %s' + #13#10 + 'user_name: %s, sql_role_name: %s.') + #13#10 + e.Message, [BaseDeDatos, UsuarioBD, RolBD]));
     end;
  end;

Última edición por duilioisola fecha: 09-12-2025 a las 08:40:10.
Responder Con Cita
 


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
error de collation en sql server juank1971 MS SQL Server 0 07-01-2016 22:29:37
Cannot resolve collation conflict for equal to operation ocram SQL 2 11-10-2008 19:18:21
Charset en MySQL quade MySQL 0 02-11-2004 13:05:14
Collation Drivers para Interbase 6.0 tin Firebird e Interbase 5 16-06-2004 19:02:54


La franja horaria es GMT +2. Ahora son las 00:22:08.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi